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 视为猴子路径。
我在使用 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 视为猴子路径。