首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Rails 3中的控制器中使用混合器或模块?

如何在Rails 3中的控制器中使用混合器或模块?
EN

Stack Overflow用户
提问于 2010-10-15 18:42:47
回答 3查看 13.4K关注 0票数 27

我在控制器中有一些行为,为了更好地测试并在几个地方重用它,我把它拉到一个模块中。关于这一点,有两个问题:

  1. 哪里是放置模块的好地方?它们需要运行才能对控制器可用,所以我想使用config/initializers/目录。不过,我觉得有点可疑。lib/
  2. How我是否确保代码被运行,以便include可以在控制器中使用这些模块?

谢谢各位先生。

EN

Stack Overflow用户

回答已采纳

发布于 2010-10-16 13:03:05

  1. lib/对于模块来说是一个很好的地方;比config/initializers/好得多--至少在我看来是这样的。如果它是几个模块,或者一个大模块,您也可以考虑将它作为一个插件,并将其放在vendor/plugins中。如果您将其放入
  2. 中,则需要手动保存该文件。默认情况下,Rails不会在lib/目录中自动加载文件。您可以将需求放在您的一个配置文件中.

我通常把我的附加自动加载到config/application.rb中。类似这样的操作应该可以做到(假设您的.rb文件位于一个名为lib/my_module的目录中):

代码语言:javascript
复制
config.autoload_paths += Dir["#{Rails.root}/lib/my_module"]

您必须确保您的模块是实际的module,而不是class。然后,您可以简单地将其包括在内:

代码语言:javascript
复制
# 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!"
票数 38
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3945124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档