ここでのやり取りは少し複雑ですので、ご容赦ください。私はSpreeで働いています。Spree は、'Spree::Variant' を含む一部のモデルで delegate_belongs_to を使用しています。'delegate_belongs_to :product, :available_on (...)' は元のクラス本体で呼び出されています。
バリアントが独自の 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
この 1 つの引数を削除するためにバリアント クラス全体をオーバーライドすることは避けたいと思います。これは私の最近の試みの1つです:
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にあるからなのか、実行順序に問題があるのか どうかはわかりませんが、このメソッドをオーバーライドできないようです。ここで何が理解できていないのですか?
ありがとう。