我一直在追逐一個問題一段時間,仍然無法弄清楚發生了什麼。我無法通過正常的持久性方法編輯從我的寶石製作的文檔,如update
,甚至只是編輯屬性,並致電save
。使用正常的持久化方法通過mongoid更新Rails模型的屬性
例如,調用:
Scram::Policy.where(id: a.id).first.update!(priority: 12345)
不會在所有的工作(沒有錯誤,但該文件一直沒有更新)。但下面將正常工作:
Scram::Policy.collection.find({ "_id" => a.id }).update_one( { "$set" => {"priority" => 12345}})
我不知道我做錯了。調用更新並保存在任何其他模型上都可以正常工作。有問題的文檔來自我的寶石:https://github.com/skreem/scram/blob/master/lib/scram/app/models/policy.rb
我無法編輯其嵌入式文檔(目標)。我曾試圖消除store_in
宏,正好在指定一個假的應用程序中使用inverse_of
和class_name
重新實現這些類使用什麼等級:https://github.com/skreem/scram-implementation/blob/master/lib/scram/lib/scram/app/models/policy.rb
我試圖重新實現整個寶石放入乾淨的假Rails應用程序:https://github.com/skreem/scram-implementation
運行這些在軌控制檯演示瞭如何更新不起作用: https://gist.github.com/skreem/c70f9ddcc269e78015dd31c92917fafa
這是關於嵌入文檔mongoid的問題,或者是有一些小的複雜性,我在我的代碼失蹤?
編輯: 問題繼續,如果你從我的寶石(急停)的根目錄運行irb
,然後運行以下命令:
require "scram.rb"
Mongoid.load!('./spec/config/mongoid.yml', :test)
Scram::Policy.first.update!(priority: 32) #=> doesn't update the document at all
Scram::Policy.where(id: "58af256f366a3536f0d54a61").update(priority: 322) #=> works just fine
奇怪的是,以下不工作: Scram::Policy.where(id: "58af256f366a3536f0d54a61").first.update(priority: 322)
看起來好像first
沒有檢索我想要的。進行相等比較表明,第一個文檔等於where
查詢返回的第一個文檔。