我使用config autoload_paths来加载包含一些演示模型的子目录。
Rails 4: organize rails models in sub path without namespacing models?
应用/配置/ application.rb中
config.autoload_paths += Dir[Rails.root.join('app', 'models', '{*/}')]
我认为,我的问题源于我需要覆盖Monologue User模型。为此,我创建了一个本地文件
应用/模型/独白/ user.rb
class Monologue::User < ActiveRecord::Base
# code
end
我还有我的应用程序的用户模型
应用/模型/ user.rb
class User < ActiveRecord::Base
# code
end
我收到的错误是
ruby-2.1.5 / gems / activesupport-4.1.1 / lib / active_support / dependencies.rb:481:在`load_missing_constant&#39;:无法自动加载常量用户,预计 /Users/Shared/code/kindrdfood/RecRm/app/models/monologue/user.rb to 定义它(LoadError)
答案 0 :(得分:1)
您已将类名称空间的一部分包含在自动加载路径(app/models/monologue
)中。
保持自动加载路径不变。路径app/models
已包含在内。如果某个类名尚不存在,Rails会尝试查找要包含的适当文件。如果不修改加载路径,User
应自动加载app/models/user.rb
,而Monologue::User
应自动加载app/models/monologue/user.rb
。
Rails实际上做的是在你的类上调用underscore
方法(分别是它的字符串表示)。所以在Rails控制台上,你可以这样做:
>> "Monologue::User".underscore
=> "monologue/user"
>> "User".underscore
=> "user"
编辑:
如果要将自定义加载路径添加到rails的自动加载功能,我建议不要将它们放在已包含在列表中的文件夹中。也许是这样的:
config.autoload_paths << File.join(config.root, "app/decorators")
config.autoload_paths << File.join(config.root, "app/workers")
config.autoload_paths << File.join(config.root, "lib")