Rails 4:从lib自动加载

时间:2014-11-02 16:00:33

标签: ruby ruby-on-rails-4

我试图找出自动加载的东西,但是我很难在不明确要求文件的情况下使其工作。

我是否需要进行一些特殊配置,以便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)事情?

2 个答案:

答案 0 :(得分:3)

中添加config.autoload_paths += %W(#{config.root}/lib)此代码

配置/ application.rb中

答案 1 :(得分:0)

你说你需要config/application.rb目录中的配置是正确的。

如Sobin所述,最好的方法是在该文件中包含config.autoload_paths...

您可以在导轨指南中找到有关此内容的更多信息

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