目前我在多个模块中重复了这样的代码:
def do_something_polymorphic
self.something_polymorphic_able.where(.....).each do |thing|
...
end
end
本着 DRY 的精神,我尝试do_something_polymorphic()
进入/lib/shared_methods.rb
. 当我include SharedMethods
在模型中添加时出现错误:
uninitialized constant Chapter::SharedMethods (NameError)
我不知道如何解决。
然后我尝试将模块文件加载到模型(load 'shared_methods.rb'
)中。它加载正常,但是 Module 构造脱离了命名空间,并且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
没有走继承路线(我真的想避免,)有没有办法在多个模型之间共享使用self
关键字的方法?