상호 작용은 약간 복잡하므로 부담해야합니다. 저는 Spree와 함께 일하고 있습니다. Spree는 'Spree :: Variant'를 포함한 일부 모델에서 delegate_belongs_to를 사용합니다. 'delegate_belongs_to : product, : available_on (...)'이 (가) 원래 클래스 본문에서 호출되고 있습니다.보석이 ActiveRecord :: Base (내 데코레이터에서)에 추가하는 클래스 메소드를 대체하려면 어떻게합니까
변종이 고유 한 available_on 날짜를 가질 수 있기를 바랍니다. delegate_belongs_to은과 같이 자신을 주입되어
module DelegateBelongsTo
extend ActiveSupport::Concern
module ClassMethods
#...
def delegate_belongs_to(association, *attrs)
#...
end
end
end
ActiveRecord::Base.send :include, DelegateBelongsTo
나는이 하나 개의 인자를 제거하는 전체 변형 클래스를 오버라이드 (override)하지 않으려는 것입니다. 나는이에 변화의 숫자를 시도했습니다
Spree::Variant.class_eval do
class << self
alias_method :original_dbt, :delegate_belongs_to
def delegate_belongs_to(association, *attrs)
attrs.delete [:available_on]
original_dbt(association, attrs)
end
end
attr_accessible :available_on
#...
end
: 이것은 나의 가장 최근의 시도 중 하나입니다. 나는 그것이 class_eval에 있기 때문에 그것이 실행의 순서에 어떤 문제가 있거나, 무엇이 있는지는 모르겠다. 그러나 나는이 방법을 오버라이드하는 것처럼 보이지 않는다. 내가 여기서 이해하지 못하는 것은 무엇인가?
감사합니다.
이 정말 대답하지
지금까지 제공되는 솔루션을 살펴 보았습니다. 한 노트는 레일 콘솔 'Spree :: Product.method (: delegate_belongs_to) .source_location '에서 나에게 'Spree :: Variant.method (: delegate_belongs_to) .source_location'이라는 원래 위치가 내 데코레이터의 정의 라인을 제공합니다. 메소드의 중단 점은 아무 것도하지 않습니다. –