2010-11-18 13 views
2

モデルに新しいメソッドを追加できますが、既存のメソッドを上書きすることはできません。ここで私は私のモジュールRubyのモジュールから既存のインスタンスメソッドを上書きする方法はありますか?

module ExtraMethods 
    def self.included(base) 
    base.extend(ClassMethods) 
    end 

    module ClassMethods 
    def user_extra_methods 
     include ExtraMethods::InstanceMethods 
    end 
    end 
    module InstanceMethods 
    def is_invisible? 
     true unless self.active? || self.admin? 
    end 
    end 
end 

ActiveRecord::Base.send(:include, ExtraMethods) 
User.send(:user_extra_methods) 

何が起こるしたいことは、モデル内のメソッドをオーバーライドするプラグイン内のメソッドのためにあるの私User.rb

include ExtraMethods 
def is_invisible? 
    true unless self.active? 
end 

を持っているものです。どんな思考や参考文献も素晴らしいだろうし、これについての良い参考文献を見つけることはできないようだ。

ありがとうございました!

j

答えて

1

あなたがクラスメンバを宣言する順序は重要です。

あなたはプラグインのincludeの前にのself.activeを実行していますか?メソッドは宣言されています...モデル宣言は後で宣言されているので、常に優先されます。

あなたはこのような何かに頼る必要があります:

http://weblog.rubyonrails.org/2006/4/26/new-in-rails-module-alias_method_chain

関連する問題