假设我有三个模型看起来(基本上)像这样:
class User < ActiveRecord::Base
has_many :projects
has_many :deliverables
end
class Project < ActiveRecord::Base
belongs_to :user
has_many :deliverables
end
class Deliverable < ActiveRecord::Base
belongs_to :user
belongs_to :project
end
现在,我想要发生以下情况:当project
从一个user
转移到另一个deliverables
时,所有关联的project = Project.find(some_criteria)
deliverables = project.deliverables
project.user_id = new_user_id
deliverables.each do |d|
d.user_id = new_user_id
end
都会随之转移。如下所示:
transfer_user
有没有办法自动化我刚才描述的内容?我当然可以把它放在一个方法中(比如user_id
),但我希望只要{{1}}设置为新值就会自动发生。
答案 0 :(得分:4)
您可能仍希望实现transfer_user方法,但通过执行以下操作在项目模型中添加回调:
class Project < ActiveRecord::Base
after_save :transfer_user, :if => "user_id_changed?"
end