2010-06-03 1 views
0

이제는 문제가 발생합니다. 콜백을 만들려면 어떻게해야합니까? # after_add는 has_many : through 연결에서 조인 모델에 대한 참조를 받습니까? 이 같은 내 코드 :ActiveRecord 사용 방법 # afeter_add

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 특성을 설정하고 싶습니다. 그건 내 질문이다! 건배!

답변

0

아마도 또한 Emergencyhas_many :eme_references :

당신은 부서에 after_create 후크 (나는 비상 has_many의 eme_references의 has_many 부서를 있으리라 믿고있어)를 만들 수 있을까? 이 경우

, 당신이 거기에 콜백을 첨부 할 수 있어야한다 :

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

블록은이 개 매개 변수를 허용, 첫 번째는 Emergency 것, 두 번째는 EmeReference 추가되는 될 것입니다.

아마도 EmeReferencebefore_save 콜백이이 인스턴스에서 원하는 것을 수행 할 수 있습니까?

0

내가하고 싶은 일은 거기에서 할 수 없다고 생각합니다. :through 연관이 일을 위해서는

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