目前,我在多个模块中重复编写代码,如下所示:
def do_something_polymorphic
self.something_polymorphic_able.where(.....).each do |thing|
...
end
end本着DRY的精神,我尝试在/lib/shared_methods.rb中将do_something_polymorphic()移动到一个模块中。当我在我的模型中添加include SharedMethods时,我得到了一个错误:
uninitialized constant Chapter::SharedMethods (NameError)我不知道该怎么解决这个问题。
然后,我尝试将模块文件加载到模型(load 'shared_methods.rb')中。它加载正常,但是模块构造抛出了名称空间,并且没有为加载/包含它的模型定义do_something_polymorphic()。因此,如果您试图自引用一个对象,则"Module“似乎不是一个选项。
最后,我从shared_methods.rb文件中删除了模块结构,只在文件中保留了do_something_polymorphic()方法。它加载正常,但当我运行该方法时,我得到了错误:
NoMethodError: private method `do_something_polymorphic' called for #<Polymorphic_Object:0x007fc27e5b8338>不知道下一步该怎么走。我可以将其设置为一个模块,并尝试将"self“作为对象参数传递给该方法,但我希望保留针对其对象干净地调用该方法的能力:current_object.do_something_polymorphic
除了继承路线(我真的很想避免),有没有办法在多个模型之间共享使用self关键字的方法?
发布于 2012-06-17 22:48:55
您可以通过修改应用程序配置自动包含lib/ modules。
#config/application.rb
config.autoload_paths += %W(#{config.root}/lib)https://stackoverflow.com/questions/11069741
复制相似问题