将模型"实用程序"函数放在Ruby on Rails中的位置

Phi*_*McT 27 ruby-on-rails

我有一个有几个型号的rails应用程序.

我有一个我想从几个模型访问的功能.

放置此代码的最佳位置是什么?如何从需要访问它的模型中访问它?

我的理解是帮助者只是为了观点.它是否正确?

创建一个插件并将其放入供应商文件夹似乎是错误的 - 这是我的代码并且是我的应用程序的组成部分.它是否正确?

谢谢.

Luk*_*ath 31

最简单的解决方案是在lib下创建一个模块,并将其混合到需要它的模型中,例如,在lib/fooable.rb中:

module Fooable
  def do_foo
  end
end
Run Code Online (Sandbox Code Playgroud)

然后在你的各种模型中:

class MyModel < ActiveRecord::Base
  include Fooable
end
Run Code Online (Sandbox Code Playgroud)

无需要求fooable.rb,Rails自动加载机制会为您找到它,只要它使用正确的约定命名.

  • 这样的事情我放入/ model/concerns(如果它只是为了扩展模型)但是对于实用程序类我将它们放在lib/utils中(lib可能会变得拥挤) (3认同)