【发布时间】:2012-06-17 07:46:30
【问题描述】:
目前我在多个模块中重复了类似这样的代码:
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 关键字的方法?
【问题讨论】:
标签: ruby-on-rails-3 activerecord shared-libraries polymorphic-associations