jer*_*son 27 mixins ruby-on-rails-3
我在控制器中有一些行为,我将其拉出到一个模块中,以便更好地测试并在一些地方重复使用它.关于这个的两个问题:
config/initializers/目录.这对我来说似乎有点怀疑.lib/?include我的控制器中可以使用模块?谢谢你,先生.
von*_*rad 38
lib/是模块的绝佳场所; 比config/initializers/我更好 - 至少在我看来.如果是几个模块或一个大模块,您还可以考虑将其作为插件并放入其中vendor/plugins.
如果你把它放进去lib/,你需要手动require输入文件.默认情况下,Rails不会自动加载目录中的lib/文件.您可以将require放在一个配置文件中.
我通常把我的额外自动加载config/application.rb.这样的事情应该成功(假设你的.rb文件在一个名为的目录中lib/my_module):
config.autoload_paths += Dir["#{Rails.root}/lib/my_module"]
Run Code Online (Sandbox Code Playgroud)
你必须确保你的模块是实际的module而不是class.然后,您可以简单地包含它:
# lib/my_module/foobar.rb
module Foobar
def foobar
"Hello world!"
end
end
# app/models/my_model.rb
class MyModel < ActiveRecord::Base
include Foobar
end
# rails console
>> obj = MyModel.first
=> #<MyModel id: 1, ...>
>> obj.id
=> 1
>> obj.foobar
=> "Hello world!"
Run Code Online (Sandbox Code Playgroud)