2017-10-12 143 views
0

在我的創業板模塊包含在其他寶石類,它是由一個自定義類的Rails應用程序擴展一個類模塊:如何包括在

我的寶石:

module MyGem 
    def my_method 
    end 
end 
AnotherGem.send :include, MyGem 

另一寶石:

class AnotherGem 
end 

類中的Rails應用:

class ClassInRailsApp < AnotherGem 
end 

運行這將導致以下行爲:

$ rails c 
Loading development environment (Rails 5.1.4) 
irb(main):004:0> MyGem.method_defined? :my_method 
=> true 
irb(main):005:0> AnotherGem.method_defined? :my_method 
=> true 
irb(main):006:0> ClassInRailsApp.method_defined? :my_method 
NoMethodError: undefined method `my_method' for ClassInRailsApp:Class 

我怎樣才能確保該類擴展,才能將我的模塊?

編輯:

我試圖直接包括ClassInRailsAppMyGem和指定實例方法仍然是不可用的。這個問題是否與此有關?

+0

你這裏的例子代碼實際上產生'true',所以我不確定你的問題到底是什麼。這應該有效,並且對我有用。 – tadman

回答

1

在你的想法中,你只是調用一個方法,例如@ object.my_method。實際上,您正在調用Class level方法,例如Object.my_method,但將其定義爲實例級別的方法。正確的方法來做你想要的是Object.new.my_method,但是,不要那樣做。

要調用這樣的方法,您必須將其定義爲類上的方法。請參閱this page,以獲得更好的理解。特別是關於如何通過模塊定義類級別方法的「常見成語」部分。