目前我已經重複這樣的代碼需要共享模型方法:的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
關鍵字的方法?
Thanks @Salil。修復了「包含SharedMethods」問題。這反過來又解決了另一個問題。我現在可以從所有不同的對象類型中調用do_something_polymorphic()方法。這使得一切都很好,幹!再次感謝。 –