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