将模型“实用程序”函数放在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不会。