0

目前我已經重複這樣的代碼需要共享模型方法:的Rails 3 - 多態模型在多個模塊的東西

def do_something_polymorphic 
    self.something_polymorphic_able.where(.....).each do |thing| 
    ... 
    end 
end 

乾的精神,我想移動do_something_polymorphic()到一個模塊在/lib/shared_methods.rb。當我在我的模型中加入include SharedMethods我得到了一個錯誤:

uninitialized constant Chapter::SharedMethods (NameError) 

對此我無法弄清楚如何繞過。

然後我試着將模塊文件加載到模型中(load 'shared_methods.rb')。它裝載正常,但模塊構造拋棄了名稱空間,並且do_something_polymorphic()對於其加載/包含的模型未定義。因此,如果您嘗試自我引用對象,「模塊」似乎不是一個選項。

最後,我從shared_methods.rb文件中移除了模塊構造,並且僅在文件中留下了do_something_polymorphic()方法。它裝載正常,但是當我運行該方法時,我得到了錯誤:

NoMethodError: private method `do_something_polymorphic' called for #<Polymorphic_Object:0x007fc27e5b8338> 

不確定從哪裏去。我可以回過頭來將它設置爲一個模塊,並嘗試將「self」作爲對象參數傳遞給該方法,但是我希望保留清晰地針對其對象調用方法的能力:current_object.do_something_polymorphic

Short去繼承路線(我真的想避免),有沒有一種方法可以在多個模型中共享一個使用self關鍵字的方法?

回答

1

您可以通過修改應用程序配置自動包含lib /模塊。

#config/application.rb 

config.autoload_paths += %W(#{config.root}/lib) 
+0

Thanks @Salil。修復了「包含SharedMethods」問題。這反過來又解決了另一個問題。我現在可以從所有不同的對象類型中調用do_something_polymorphic()方法。這使得一切都很好,幹!再次感謝。 –