0

现在我有一个问题,如何让回调#after_add 在 has_many :through 关联中接收对连接模型的引用?我的代码是这样的:

   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。那是我的问题!干杯!

4

2 回答 2

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
于 2010-06-03T11:07:15.567 回答
0

大概Emergency也是has_many :eme_references为了让:through协会运作?

在这种情况下,您应该能够在此处附加回调:

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

该块接受 2 个参数,第一个是Emergency,第二个是EmeReference被添加的。

在这种情况下,也许before_save回调EmeReference也可以做你想做的事?

于 2010-06-03T11:59:29.470 回答