Rails 3的这个主题似乎有很多问题(和答案),但我现在要求在2015年Rails 4(或即将推出的5)。如何覆盖关联(has_one)getter(延迟加载)?
我试图使用图案像以下的(用于在用户::资料的情况下的HAS_ONE协会,我想懒惰负荷):
def profile
self.build_profile unless self[:profile]
super
end
的问题是,在上述端部使用一个没有.id的Profile对象,所以表格只会附加无关联的记录。
这工作(但我打电话超两次,我不知道有足够的了解红宝石知道这是一件可怕的事情 - 没有任何警告):
def profile
self.build_profile unless super
super
end
活动记录文档显示你可以使用super或* _attribute(或[]),但是在实现'超级'的过程中,关联关系似乎有所不同。
我仍然可以使用别名方法链接,但我想知道我的模式有什么问题。
编辑:看来使用“accep_nested_attributes_for”使这件事情变得复杂。
我删除了overidden getter和将我的'fields_for'改为包含创建占位符对象的简单逻辑,例如:<%= f.fields_for:profile,(user.profile || user.build_profile)do | profile_f | %>这不是我的问题的答案,但它是我提出的问题的完全可以接受的解决方案。 – chrisp