我试图找出自动加载的东西,但是我很难在不明确要求文件的情况下使其工作。
我是否需要进行一些特殊配置,以便Rails 4能够自动加载lib
目录中的文件?
如果我转到rails console
并输入$LOAD_PATH
,我可以看到/home/some_user/workspace/rails/myapp/lib
包含在加载路径中。这应该意味着Rails能够自动加载正确的文件吗?
据我了解:
如果我将我的文件放在lib/
目录中并且我会使用命名约定,Rails应该能够自动要求正确的文件,如果在我的代码中的任何地方我会做这样的事情:
cats = Cats::SomeCat.new
(鉴于lib/cats/some_cat.rb
存在)
且some_cat.rb
包含:
module Cats
class SomeCat
def initialize
@name = "Some cat"
end
end
end
但是,Rails会向我显示错误uninitialized constant CatController::Cats
。
如果我添加一行require 'cats/some_cat'
,一切都会有效。但是,在The Rails 4 Way'我读到的是:
The bottom line is that you should rarely need to explicitly load Ruby code in your Rails application (using require) if you follow the naming conventions
。
我使用了错误的命名约定还是我被迫使用那个
config.autoload_paths += %W(#{config.root}/lib)
事情?
答案 0 :(得分:3)
在
中添加config.autoload_paths += %W(#{config.root}/lib)
此代码
配置/ application.rb中
答案 1 :(得分:0)
你说你需要config/application.rb
目录中的配置是正确的。
如Sobin所述,最好的方法是在该文件中包含config.autoload_paths...
。
您可以在导轨指南中找到有关此内容的更多信息