我有一个模型对象(比如说是Parent),在另一个模型对象(Child)上有一个has_many关联。
class Parent < ActiveRecord::Base
has_many :children
accepts_nested_attributes_for :children
end
class Child < ActiveRecord::Base
belongs_to :parent
end
在Parent上,我想在before_update回调上添加代码,以根据其子项设置计算属性。
我遇到的问题是,当我使用方法Parent.update(id,atts),为新子节点添加atts时,在at_update中添加的atts集合中的那些不可用(self.children返回老收藏品。)
有没有办法在不弄乱accepts_nested_attributes_for的情况下检索新的?
答案 0 :(得分:3)
您所描述的内容适用于Rails 2.3.2。我想你可能没有正确地分配给父母的孩子。更新后儿童是否更新?
accepts_nested_attributes_for,在您的问题中使用,在父级上创建一个child_attributes编写器。我感觉你正在尝试更新:孩子而不是:children_attributes。
这可以使用你所描述的模型,以及在before_update回调之后:
before_update :list_childrens_names
def list_childrens_names
children.each{|child| puts child.name}
end
控制台中的这些命令:
Parent.create # => Parent(id => 1)
Parent.update(1, :childrens_attributes =>
[{:name => "Jimmy"}, {:name => "Julie"}])
产生这个输出:
Jimmy
Julie