Rails - 更改子级的父级并确保执行回调

时间:2010-03-02 13:02:51

标签: ruby-on-rails activerecord

如果我有

class Parent < ...
has_many :children,
         :before_add => :prepare_baby_room
         :after_remove => :plan_holiday
end

class Child < ...
belongs_to :parent
:after_create => :gurgle_a_lot
:after_remove => :cry
end

我希望将一个孩子与一个不同的父母重新关联,这是最干净的方法,同时确保在父母一方和孩子一方同时调用所有回调?

即。我希望实现这样的目标

@child = @curr_parent.children.first
@child.update_attributes(:parent_id, @new_parent)

我只是做一些像

这样的事情
@child = @curr_parent.children.first
@curr_parent.children.delete(@child)
@new_parent.children.create(@child)
@child.update_attributes(:parent_id, @new_parent)

2 个答案:

答案 0 :(得分:0)

我没有尝试过,但我怀疑你应该能够重新表达孩子:

child = parent.children.first
child.parent = new_parent
child.save!

答案 1 :(得分:0)

这也应该有效:

child = oldParent.children.first
newParent.children << child