這裏的交互有點複雜,請耐心等待。 我正在使用Spree。 Spree在其一些模型中使用了delegate_belongs_to,包括「Spree :: Variant」。 '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
我寧願不重寫整個variant類刪除此一個參數。這是我最近的嘗試之一:
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'給了我在我的裝飾器中的定義線。方法中的斷點雖然沒有做任何事情。 – 2012-07-19 21:04:42