2012-04-16 9 views
-1

私は別の宝石からメソッドをオーバーライドしようとしています。私の宝石でルビのクラスメソッドをオーバーライドする

module DatabaseCleaner 
    class Base 
    def orm_strategy(strategy) 
     # ... 
    end 
    end 
end 

:コードは次のようになります

require 'database_cleaner/base' 

module DatabaseCleaner 
    class Base 
    def orm_strategy(strategy) 
     # New code 
    end 
    end 
end 

しかし、元はまだ使用されています。私は間違って何をしていますか?

+0

'class bar'を意味しませんか? –

+1

元のモジュールを最初に含めましたか? –

+0

@MatheusMoreira yaちょっとタイプミス。 – Major

答えて

2

Foo::Barクラスのインスタンスメソッドをオーバーライドしようとしています。クラスのメソッドを再定義する必要があります:

module Foo 
    class Bar 
    def self.test # self == Bar 
     # New code 
    end 
    end 
end 
+2

元のコードが質問に記載されているように見える場合、OPは実際にインスタンスメソッドをオーバーライドしたいと考えています。 –

+1

これを試しても問題は解決しませんでした。まだ古い機能を打つ。 – Major

+0

@ Major、 'require'コールの後でクラス定義の直後に' p DatabaseCleaner :: Base.instance_method(:orm_strategy) 'を追加して、出力を教えてください。 (:orm_strategy) モジュールを必要DatabaseCleaner クラスベース 端のp DatabaseCleaner :: Base.instance_method後 –

関連する問題