我在awsmail.rb
目录中创建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
如何自动加载此文件?
答案 0 :(得分:2)
您必须将其添加到autoload_path
中的config/application.rb
,例如:
config.autoload_paths += %W(#{config.root}/lib)
答案 1 :(得分: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
文件夹添加到自动加载路径。