0

今私は問題を抱えています、どうすればcallback#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がEmergencyであることがわかります。モデルEmeReferenceの属性eme_flagを設定したいと思います。それが私の質問です!乾杯!

4

2 に答える 2

0

おそらく、協会が機能するためにEmergencyも?has_many :eme_references:through

その場合、そこにコールバックを添付できるはずです。

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

ブロックは2つのパラメーターを受け入れます。最初のパラメーターは、、2番目のパラメーターはEmergency追加EmeReferenceされます。

おそらく、のbefore_saveコールバックはEmeReference、このインスタンスであなたが望むことを行うこともできますか?

于 2010-06-03T11:59:29.470 に答える
0

あなたがやりたいことはそこではできないと思います。

部門にafter_createフックを作成できます(Emergency has_many eme_references has_manydepartmentsを想定しています):

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 に答える