여러 모델을 관찰하는 순간 플러그인/젬을 개발하려고합니다. 이상적으로, 관찰자는여러 모델에 대해 ActiveRecord Observer를 동적으로 인스턴스화합니다.
class MyModel < ActiveRecord::Base
# a class method like this will tell the observer to observe this model
observe_me
end
내 초기 접근 방식은 클래스 메소드는 AR 기반에 포함 정의했다 ... 하나의 단일 방법으로 자동으로 인스턴스화해야합니다 다음
module ClassMethods
def observe_me
@observe_me = true
end
def should_observe_me?
@observe_me
end
end
ActiveRecord::Base.extend(ClassMethods)
그리고 감지하려면이 옵션을 사용하는 모델은 관찰자 내에서 관찰 :
class MyObserver < ActiveRecord::Observer
# this should observe all models where should_observe_me? #=> true
observe ActiveRecord::Base.descendants.select { |m| m.try(:should_observe_me?) }.map(&:model_name)
end
내가 실행 해요 문제는 모델을 정의하기 전에 관찰자가 ActiveRe 있도록,로드되고 있다는 점이다 코드에는 후손이 없으며 MyObserver는 어떤 모델을 관찰해야할지 모릅니다.
내 다음 시도는 ActiveRecord :: Base.observers 및 ActiveRecord :: Base.instantiate_observers로 해킹했지만 운이 없었습니다. 이 순간에 같이
그래서 :
관찰자가 정의되어 있지만 관찰 할 수있는 모델을 알 수 없습니다. 모델을 정의하고 관찰하기 위해 자체적으로 플래그를 지정하지만 관찰자는 이미 관찰되었습니다.
모델이 정의되거나이 문제에 대한 더 나은 접근 방법을 생각할 때까지 관찰자의 로딩을 지연시킬 수있는 방법이 있습니까?
이것은 나를 위해 작동하지 않았다 – Dinedal
@Dinedal : 작동하지 않는 부분을 확장 할 수 있습니까? –