ActionMailer 的未定义方法“默认”

undefined method `default' for ActionMailer

我在使用 Rails 5 操作邮件程序时遇到了这个奇怪的错误。

# app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
  default from: "from@example.com"
  layout 'mailer'
end

IRB

~/workspace/rails5 > rails c       ruby-2.4.1@rails5
Running via Spring preloader in process 45498
Loading development environment (Rails 5.1.2)
2.4.1 :001 > ApplicationMailer
     NameError: uninitialized constant Mail::TestMailer
     from app/mailers/application_mailer.rb:1:in `<top (required)>'
     from (irb):1
2.4.1 :002 > ApplicationMailer
     NoMethodError: undefined method `default' for ApplicationMailer:Class
     from app/mailers/application_mailer.rb:3:in `<class:ApplicationMailer>'
     from app/mailers/application_mailer.rb:1:in `<top (required)>'
     from (irb):2
2.4.1 :003 >

这是rails5.

的默认脚手架

发生了两件非常奇怪的事情,第一件事是它总是告诉我未初始化的常量,然后告诉我 default 不是方法。

只是想知道如何修复它或者我是否应该降级到 Rail 5.0

结果证明,如果您有一个名为 mail 的模型,ActionMailer 将首先获取该模型,而不是 rails class。如果发生这种情况,那么它第一次失败,但第二次将加载 rails class 并尝试将它们粉碎在一起。允许子模块工作但将主 class 视为猴子路径。