2016-11-21 65 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

谢谢,它的工作原理。 –