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

时间:2009-08-07 01:59:34

标签: ruby-on-rails

我有一个有多种型号的rails应用程序。

我有一个我想从多个模型访问的功能。

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

我的理解是帮助者只是为了观点。这是对的吗?

创建一个插件并将其放在vendor文件夹中似乎是错误的 - 这是我的代码并且是我的应用程序的组成部分。这是对的吗?

感谢。

2 个答案:

答案 0 :(得分:31)

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

module Fooable
  def do_foo
  end
end

然后在各种模型中:

class MyModel < ActiveRecord::Base
  include Fooable
end

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

答案 1 :(得分:1)

为了减少代码的重复,你还可以创建一个包含该模块的主类,并从你想要分享行为的每个模型中简单地继承它。

类似的东西:

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_foo功能而Item不会。

相关问题