Rails - изменение родительского объекта и обеспечение выполнения обратных вызовов - PullRequest
1 голос
/ 02 марта 2010

Если у меня есть

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 голосов
/ 02 марта 2010

Это тоже должно работать:

child = oldParent.children.first
newParent.children << child
0 голосов
/ 02 марта 2010

Я не пробовал, но я подозреваю, что вы должны просто иметь возможность воспитывать ребенка:

child = parent.children.first
child.parent = new_parent
child.save!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...