2014-05-23 33 views
0

lib/我有 'aisis_writer/loader.rb' 的,即文件中,看起來像下:這是一個未初始化的常量。 (混入在軌)

module AisisWriter 
    module Loader 
    end 
end 

我再有,在我application.rb以下設置:

require File.expand_path('../boot', __FILE__) 

# Pick the frameworks you want: 
require "active_record/railtie" 
require "action_controller/railtie" 
require "action_mailer/railtie" 
require "sprockets/railtie" 
# require "rails/test_unit/railtie" 

# Require the gems listed in Gemfile, including any gems 
# you've limited to :test, :development, or :production. 
Bundler.require(:default, Rails.env) 

module AisisWriter 
    class Application < Rails::Application 
    # Load Lib 
    config.autoload_paths += %W(#{config.root}/lib) 

    # Use Rack Attack For Throttling 
    config.middleware.use Rack::Attack 
    end 
end 

從那裏我做了,在ApplicationController.rbinclude AisisWriter::Loader,然後我跑我的測試,並得到:

'<class:ApplicationController>': uninitialized constant AisisWriter::Loader (NameError)

要麼因爲命名衝突我做不了我所做的事情,要麼我做錯了什麼。任何人都在意告訴我我可能會做錯什麼?

+0

每個Rails開發者在他們的職業生涯的Rails至少一次面對這個問題。這是一個非常棒的文章,它解釋了軌道自動加載。 http://urbanautomaton.com/blog/2013/08/27/rails-autoloading-hell/ –

回答

0

我不認爲你的config.autoload_paths是足夠廣泛的 - 它不包括lib目錄的子文件。

這應該做的伎倆:

config.autoload_paths += Dir[Rails.root.join('lib', '{**/}')] 
+0

現在我得到:'無法自動加載常量加載程序,預計/ Users/Adam/Dropbox/AisisGit/Aisis-Writer/lib/aisis_writter/loader.rb來定義它(LoadError)' – user3379926

+0

@ user3379926它看起來像你在你的路徑有一個錯字。在錯誤那裏它正在看''lib/aisis_writter'',但我認爲你的意思是隻有1. – pdobb

-1

嘗試 'aisis_writer/loader.rb' 中定義這樣

module AisisWriter::Loader 
end 
+0

它是一個mixin加載器,爲什麼我想要一個類? – user3379926

+0

這是因爲您正在lib文件夾中加載'loader.rb'文件。所以,當應用程序運行時,這個文件將被調用,並且將使用與'文件名'相同的'class name'進行搜索,這是它無法找到的。你有另一種選擇來定義Loader模塊爲「module AisisWriter :: Loader」 – cvibha