나는 다음과 같은 클래스가 :루비 메타 프로그래밍 Q :에 외부 클래스의 메소드를 호출 after_save
class AwardBase
class AwardOne < AwardBase
class Post < ActiveRecord::Base
포스트는 액티브하고, 수상이 can_award을 가지고 있습니까? 게시물 객체를 취하여 어떤 기준을 충족하는지 확인하는 클래스 메소드입니다. 그렇다면 post.owner.awards를 업데이트합니다.
Observer 패턴을 사용하여이 작업을 수행 할 수 있음을 알았습니다. 그러나, 그 모델에 추가 코드를 추가해야합니다. 가능하다면 모델을 전혀 건드리지 않으려합니다. 내가이 (트리거가 클래스로드시에 호출됩니다) 같은 상 검사를 실행 할 싶습니다
class AwardOne < AwardBase
trigger :post, :after_save
def self.can_award?(post)
...
end
end
위의 코드와 의도가 자동으로 AwardOne.can_award를 추가해야한다는 것입니다? 기본적으로
class Post < ActiveRecord::Base
after_save AwardOne.can_award?(self)
...
end
인 : 포스트의 after_save 방법에
그래서 기본적으로 내가 할 노력하고있어하면 trigger
전화가 동등 얻을 수 있습니다
class Post < ActiveRecord::Base
after_save :check_award
def check_award
AwardOne.can_award?(self)
end
end
어떻게 Post 클래스를 수정하지 않고이 작업을 수행합니까? 여기
는 (작업 표시되지 않음) 내가 무슨 짓을했는지의 :
NameError (undefined local variable or method `award_callback' for #<Post:0x002b57c04d52e0>):
이 오류는 스택 추적을 제공하십시오. –
여기에 수락 된 대답과 비슷한 ActiveSupport :: Concerns를 사용할 수 있습니다. http://stackoverflow.com/questions/12084234/how-do-i-use-ruby-metaprogramming-to-add-callbacks-to-a- rails-model? rq = 1 – Anand
하지만 여전히 모델에 포함시켜야합니다 !! 나는 확실하지 않다. – argentum47