2014-07-15 43 views
1

我想要一個模塊來alias_method_chain從它包含到類中的方法。這裏是我寫的:模塊中的alias_method_chain

module MyModule 
    self.included(base) 
    base.class_eval do 
     alias_method_chain :perform, :chain 
    end 
    end 
    def perform_with_chain(opts) 
    #Do some stuffs 
    perform_without_chain(opts) 
    #Do some other stuffs 
    end 
end 

class SomeClass 
    include MyModule 
    def perform(opts) 
    end 
end 

但這拋出,因爲,當包括模塊,該perform方法尚未SomeClass定義的錯誤:

in `alias_method': undefined method `perform' for class `SomeClass' (NameError) 

應該怎麼寫這個模式所以別名鏈完全有效?

+0

你可以寫'包括MyModule'在'SomeClass'聲明的_END_ ... –

回答

2

包括在perform之後被定義。

class SomeClass 
    def perform(opts) 
    end 
    include MyModule 
end 
+0

我不想這樣做,因爲該模塊可以在寶石捆綁在一起,因此它會要求一些用戶要小心在哪裏包含模塊。有更好的解決方案 – muichkine