2012-04-16 67 views
-1

我試圖從另一個gem重寫方法。該代碼看起來是這樣的:在Ruby中重寫類方法

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'嗎? – 2012-04-16 18:16:37

+1

您是否首先包含原始模塊? – 2012-04-16 18:16:42

+0

@MatheusMoreira ya在這裏只是一個錯字 – Major 2012-04-16 18:18:08

回答

2

您正在嘗試覆蓋Foo::Bar類的實例方法。你必須重新定義班級的方法:

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

如果原始代碼看起來像問題中所述,OP實際上是想覆蓋實例方法。 – 2012-04-16 18:23:04

+1

試過這個,它沒有解決問題。仍然擊中舊功能。 – Major 2012-04-16 18:25:18

+0

@Major,你可以在'require'調用後立即添加'p DatabaseCleaner :: Base.instance_method(:orm_strategy)'並在類定義之後立即添加,然後告訴我們輸出結果嗎? – 2012-04-16 18:39:45