我在使用update_attributes
引用的文檔時遇到問題。我已經減少了我的問題,以一個簡單的例子,AFAICT應該工作,但不會:Mongoid update_attributes創建新的引用文檔
class Account
include Mongoid::Document
has_many :submissions, :autosave => true
end
class Submission
include Mongoid::Document
belongs_to :account
end
a = Account.new
a.save!
s = Submission.new
s.update_attributes({"account" => {"id" => a.id}})
s.save!
a.id == s.account.id # false
至update_attributes
呼叫正在創造一個新的空白Account
對象,而不是引用現有的一個,我要告訴它使用。這是怎麼回事?
UPDATE
要清楚,我想處理在update
作用,這增加了一個Account
到Submission
HTML表單。我知道還有其他的方法可以通過編寫特定的代碼來鏈接這些文檔。但正常的rails方式應該允許我使用HTML表單來更新文檔,對嗎?
謝謝,這確實有效,但這不是我想要做的。我更新了這個問題,指出我正試圖通過一個表單向'Submission'添加一個'Account'。 – Leopd 2013-02-12 16:29:24
您仍然應該保存父對象,而不是孩子。 (基於你給出的模型,你不是「爲'Submission''添加一個'Account'。''''Account's持有'Submission's,而不是相反。)你是否使用Rails表單gem來處理關係?也許如果你從'update'方法發佈一些代碼,我可以提供幫助。 – 2013-02-12 16:52:29
我聽到你在說什麼,但是「提交」文檔在mongo中有'account_id'字段,而不是相反。我應該可以更新一個'Submission'並將其指向一個'Account',即使我只擁有對'Account'對象的只讀訪問權限。我的'update'方法是純粹的vanilla scaffold,HTML表單發佈了問題中的內容。 – Leopd 2013-02-12 17:32:16