我有一个有多种型号的rails应用程序。
我有一个我想从多个模型访问的功能。
放置此代码的最佳位置是什么?如何从需要访问它的模型中访问它?
我的理解是帮助者只是为了观点。这是对的吗?
创建一个插件并将其放在vendor文件夹中似乎是错误的 - 这是我的代码并且是我的应用程序的组成部分。这是对的吗?
感谢。
答案 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不会。