我正在嘗試從 Rails 5.2 -> Rails 6.1 升級。我已經整理了所有依賴項,但現在遇到了一個問題,我的單元測驗失敗,因為測驗似乎無法在我們的測驗 sqlite3 1.4 DB 中創建新記錄。
依賴版本更新:
bundler: 1.3.5 -> 2.2.27
rails (and all immediate Rails dependencies): 5.2.4.1 -> 6.1.4.1
byebug: 10.0.2 -> 11.0.1
pry: 0.11.3 -> 0.13.1
pry-byebug: 3.6.0 -> 3.9.0
sqlite3: 1.3.13 -> 1.4.2
sass-rails: 5.0.6 -> 6.0.0
haml-rails: 1.0.0 -> 2.0.0
haml: 5.0.4 -> 5.1.4
responders: 2.4.0 -> 3.0.1
bullet: 5.8.1 -> 6.1.4
jasmine-rails: 0.14.7 -> 0.15.0
actionpack-action_caching: 1.2.1 -> 1.2.2
concurrent-ruby-ext: 1.0.5 -> 1.1.9
delayed_job_active_record: 4.1.4 -> 4.1.6
當我在測驗中插入斷點并嘗試對模型進行簡單的創建時,我看到.saveor.create回傳true,但是,記錄沒有 ID,并且該模型的計數保持不變。我在運行 save 時也有類似的經歷,因為它回傳 true,即使記錄實際上并未保存。運行 .valid 有什么奇怪的?也回傳 true 。有沒有人以前處理過類似的問題?
除錯和展示 SQL 顯示以下內容
@b.save!
-- : TRANSACTION (0.1ms) SAVEPOINT active_record_1
-- : P Load (0.1ms) SELECT "p".* FROM "p" WHERE "p"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
-- : B Update (0.1ms) UPDATE "b" SET "c_id" = ?, "d" = ?, "e" = ?, "f" = ?, "g" = ? WHERE "b"."id" IS NULL [["c_id", 3], ["d", 0], ["e", 7], ["f", 200], ["g", "Z"]]
-- : P Update (0.2ms) UPDATE "p" SET "c" = ? WHERE "p"."id" = ? [["c", "F"], ["id", 2]]
-- : TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1
要關注的主要事情是呼叫.save新記錄會導致UPDATE事務到表B而不是INSERT操作。該before_save回呼可以看出成功運行,但before_create回呼不運行。
uj5u.com熱心網友回復:
這個問題最終成為我們使用protected_attributes_continuedgem 的問題
https://github.com/westonganger/protected_attributes_continued/pull/18
protected_attributes_continued從 1.5 -> 1.6升級修復了這個問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/358387.html
標籤:红宝石轨道 sqlite ruby-on-rails-6.1
