1

我在使用update_attributes引用的文檔時遇到問題。我已經減少了我的問題,以一個簡單的例子,A​​FAICT應該工作,但不會: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作用,這增加了一個AccountSubmission HTML表單。我知道還有其他的方法可以通過編寫特定的代碼來鏈接這些文檔。但正常的rails方式應該允許我使用HTML表單來更新文檔,對嗎?

回答

1

更改HTML窗體,以「ACCOUNT_ID」不「的帳戶[ID]」,那麼它開始工作:

s.update_attributes({"account_id" => a.id}) 
s.save! 

a.id == s.account.id # true 
a == s.account # true 

很奇怪它在做什麼。也許是mongoid錯誤?

1

這不是將s添加到a的方式。你想要做的是這樣的:

a = Account.new 
a.submissions << Submission.new 
a.save! 
+0

謝謝,這確實有效,但這不是我想要做的。我更新了這個問題,指出我正試圖通過一個表單向'Submission'添加一個'Account'。 – Leopd 2013-02-12 16:29:24

+0

您仍然應該保存父對象,而不是孩子。 (基於你給出的模型,你不是「爲'Submission''添加一個'Account'。''''Account's持有'Submission's,而不是相反。)你是否使用Rails表單gem來處理關係?也許如果你從'update'方法發佈一些代碼,我可以提供幫助。 – 2013-02-12 16:52:29

+0

我聽到你在說什麼,但是「提交」文檔在mongo中有'account_id'字段,而不是相反。我應該可以更新一個'Submission'並將其指向一個'Account',即使我只擁有對'Account'對象的只讀訪問權限。我的'update'方法是純粹的vanilla scaffold,HTML表單發佈了問題中的內容。 – Leopd 2013-02-12 17:32:16