告诉我如何使用ActiveRecord#afeter_add

时间:2010-06-03 09:15:18

标签: ruby-on-rails ruby act

现在我遇到了一个问题,我怎样才能使回调#after_add在has_many中通过关联接收对连接模型的引用?    我的代码是这样的:

   class Emergency
     has_many :departments, :through => :eme_references, :after_add => Proc.new { |eme_reference| eme_reference.eme_flag = 1}
  end

属性eme_flag是模型EmeReference的属性!但在块中,我得到eme_reference.class是紧急。 我想设置模型EmeReference的属性eme_flag。 这是我的问题! 干杯!

2 个答案:

答案 0 :(得分:0)

我认为你想做的事情不能在那里完成。

您可以在部门上创建一个after_create挂钩(我假设紧急has_many eme_references has_many部门):

class Emergency
  has_many :departments, :through => :eme_references
  def flag!
    eme_flag=1
    save
  end
end

class Department
  after_create :check_emergency
  # this allows you to call department.emergency. Will return nil if anything is nil
  delegate :emergency, :to =>:eme_reference, :allow_nil => true

  def check_emergency
    self.emergency.flag! if self.emergency.present?
  end
end

答案 1 :(得分:0)

大概Emergencyhas_many :eme_references以便:through关联有效?

在这种情况下,您应该可以在那里附加回调:

has_many :eme_references, 
  :after_add => Proc.new { |emergency, eme_ref| # code here }

该块接受2个参数,第一个参数为Emergency,第二个参数将添加EmeReference

也许before_save上的EmeReference回调也可以在此实例中执行您想要的操作?