我很新的轨道和最近我发现,我明白activerecords has_one协会相反,它如何实际工作。参考rubyonrails guide的例子,我想到供应商应该持有它的account_id,因为我没有意见强迫每个账户持有它的供应商。Has_one协会混淆,我想它颠倒
因为我真的不明白为什么,或者根本不同意维护它的外键在其他对象中的对象,我不知道什么是我的简单问题的正确轨道解决方案: 我有两个对象 - 文档和草稿。每份文件都有很多草稿,其中一份标记为当前草稿。我想象中的表格布局是这样的:
table document
id
current_draft_id
table draft
id
document_id
text
我正在寻找在这里有点像一个HAS_ONE联系,但逆转,因此,该文件将保持和维护current_draft_id。使用belongs_to不是一种选择,因为它的行为不同。例如,我想document.current_draft = new_draft正确地更新foreign_key。
如何解决这个在轨道?
- 更新1
为了澄清我的问题,请假设是草案当前不会有无关created_at和的updated_at领域,所以范围不会做。
添加当前场到草案表是从视表的设计点一个奇怪的举动。我还打算将已发布的草稿的信息添加到文档对象中,并将这些信息与草稿相乘,这似乎是一个奇怪的步骤。
我喜欢Amesee的想法,但我仍然有一些内部阻力,类似于加入当前列到草案表。
感谢马特,请参阅我的问题的*更新1 *。我还谈到了与我想实现的不同的* belongs * _to *关联。 – majkel
我的最终建议与你想要做的精确匹配,你添加了原始文章中的字段,通过'.current_draft'调用它,我不明白为什么它不适合你?编辑:我已经澄清了一下。 – Matt
看看[文档](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html),并找到它是属于\ _to还是\ _one关联?_段。 _belongs \ _to_ association假定在我们的例子中它将是_draft_对象,它将负责维护它在* document *对象中的键。因此'@document.current_draft = @ draft'不会更新文档对象。 – majkel