从Rails 2.3开始,向加载路径添加一个目录以使其与Rails的自动重新加载机制挂钩的正确方法是什么?

我想到的一个具体例子是,我有一个类,它有几个使用STI的子类,我认为把它们放在一个子目录中,而不是把顶级目录弄乱是个好主意.所以我会说:

#app/models/widget.rb
class Widget < ActiveRecord::Base
   add_to_load_path File.join(File.dirname(__FILE__), "widgets")
end

#app/models/widgets/bar_widget.rb
class BarWidget < Widget
end

#app/models/widgets/foo_widget.rb
class FooWidget < Widget
end

这是我正在寻找的add_to_load_path种方法.

推荐答案

在Rails的当前版本(3.2.8)中,这一点在应用程序中已经更改.rb文件.

该代码目前被注释为:

  # Custom directories with classes and modules you want to be autoloadable.
  # config.autoload_paths += %W(#{config.root}/extras)

将需要更新autoload_paths的值.试图修改前load_paths变量导致此错误.

/configuration.rb:85:in `method_missing': undefined method `load_paths' for #<Rails::Application::Configuration:0xac670b4> (NoMethodError)

例如,对于要添加到自动加载路径配置的每个路径,添加一行类似于以下内容:

config.autoload_paths += %W(#{config.root}/app/validators)

config.autoload_paths接受Rails自动加载常量的路径array.Default is all directories under 101.

http://guides.rubyonrails.org/configuring.html


来自以下 comments (哈库宁):

如果目录在app/以下,你不需要在任何地方添加它,它应该在默认情况下工作(在3.2.12中是肯定的).Rails在开发中有eager_load_paths个,在生产中有autoload_paths个.All 103 directories are automatically added there.

Ruby-on-rails相关问答推荐

使用RubyZip处理大型压缩文件:65535个文件的限制

RSpec系统测试无法从工厂访问新创建的记录

删除链接不起作用,重定向 echo 示 Ruby

使用拆分成多个部分的种子文件进行Rails数据种植

Rails 使用多个外键创建/构建

从 rails 5 迁移到 rails 6

错误原始错误:未安装 ImageMagick/GraphicsMagick

Rails ActiveRecord 中的更新插入

显示每个 rspec 示例的运行时

Rails:保存子对象时更新父对象

Ruby - ActiveRecord::ConnectionNotEstablished

如何判断是否已经在 ruby​​ on rails 的数据库事务中?

Gem 更新:在从 ASCII-8BIT 到 UTF-8 到 US-ASCII 的转换中,无法将 "\xE7" 转换为 UTF-8

为什么使用 HTTP PUT 和 DELETE 方法而不是 POST?

RSpec 设置会话对象

rails 4.0, rake db:sessions:create

Rails - 生产模式下的错误

如何找出现有 Rails 应用程序基于哪个 Rails 版本?

设计自定义路由和登录页面

rails 3,如何在 Settings.yml 文件中使用 ENV 配置变量?