在Rails中更新特定字段时如何执行高级逻辑?

时间:2010-11-22 02:04:49

标签: ruby-on-rails ruby activerecord

假设我有三个模型看起来(基本上)像这样:

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}}设置为新值就会自动发生。

1 个答案:

答案 0 :(得分:4)

您可能仍希望实现transfer_user方法,但通过执行以下操作在项目模型中添加回调:

class Project < ActiveRecord::Base
  after_save :transfer_user, :if => "user_id_changed?"
end