Rails从

时间:2016-11-21 16:18:25

标签: ruby-on-rails ruby

我在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

如何自动加载此文件?

2 个答案:

答案 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文件夹添加到自动加载路径。