将模型“实用程序”函数放在Ruby on Rails中的位置
我有一个有几个型号的rails应用程序。
我有一个我想从几个模型访问的function。
放置此代码的最佳位置是什么?如何从需要访问它的模型中访问它?
我的理解是帮助者只是为了观点。 它是否正确?
创建一个插件并将其放入供应商文件夹似乎是错误的 – 这是我的代码并且是我的应用程序的组成部分。 它是否正确?
谢谢。
最简单的解决方案是在lib下创建一个模块,并将其混合到需要它的模型中,例如,在lib / fooable.rb中:
module Fooable def do_foo end end
然后在你的各种模型:
class MyModel < ActiveRecord::Base include Fooable end
无需要求fooable.rb,Rails自动加载机制会为您找到它,只要它使用正确的约定命名。
为了减少代码的重复,您还可以创建一个包含该模块的主类,并从您希望共享行为的每个模型中简单地inheritance该模块。
就像是:
module Fooable def do_foo end end class ParentModel < ActiveRecord::Base include Fooable end class Product < ParentModel end class User < ParentModel end class Item < ActiveRecord::Base end
因此,在该示例中,Product和User都将共享do_foofunction而Item不会。