我在使用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