2016-11-21 37 views
0

我在lib目錄內創建了一個awsmail.rbRails自動從頭開始加載lib

class AwsMail 
    def... 
end 

然而,當我把它叫做上rails console,它拋出這個錯誤。

pry(main)> AwsMail 
NameError: uninitialized constant AwsMail 

我需要自己加載這個文件,以便它可以被調用。

像這樣。

pry(main)> load "#{Rails.root}/lib/awsmail.rb" 
=> true 
pry(main)> AwsMail 
=> AwsMail 

如何讓這個文件自動加載?

回答

1

如果一個班級的名稱類似AwsMail那麼檔案應該是aws_mail.rb

檢查好的博客文章Rails autoloading — how it works, and when it doesn't

與Ruby的自動加載,這需要自動加載的常量各 的位置,對比預先指定,Rails的遵循簡單 約定映射不斷名文件名。嵌套對應 於目錄,並不斷名強調:

MyModule::SomeClass # => my_module/some_class.rb 

而且不要忘記一個lib文件夾添加到自動加載路徑。

+0

謝謝,這是一個很好的參考。 –

2

你必須將它添加到autoload_pathconfig/application.rb,如:

config.autoload_paths += %W(#{config.root}/lib) 
+0

謝謝,它的工作原理。 –