0

目前我在多个模块中重复了这样的代码:

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关键字的方法?

4

1 回答 1

1

您可以通过修改应用程序配置来自动包含 lib/ 模块。

#config/application.rb

config.autoload_paths += %W(#{config.root}/lib)
于 2012-06-17T14:48:54.667 回答