【发布时间】:2016-02-08 22:57:51
【问题描述】:
问题:如果方法就在那里,为什么它是未定义的?
详情:
我有一个非常简单的邮件类:
class ProductMailer < ApplicationMailer
def sample_email
mail(to: "me@example.com") # I hardcode my own email just to test
end
end
还有一个来自 ProductsController 的非常简单的调用:
def sample_email
ProductMailer.sample_email().deliver_later
redirect_to @product, notice: 'Email was queued.'
end
邮件发送失败。我正在使用 Sidekiq 在后台处理电子邮件。 Sidekiq Web UI 在 Tries 页面中显示失败的作业,我可以看到失败的原因:
NoMethodError: undefined method `sample_email' for ProductMailer:Class
我尝试重命名该方法并使用rails server 重新启动服务器,但这些都不能消除错误。我没有使用任何命名空间。
问题:如果方法就在那里,为什么它是未定义的?
注意:我偶然发现如果我将它命名为notify,方法是找到的,但也许那是因为我正在覆盖 ActionMailer 基类中的一些方法,我不知道。
【问题讨论】:
-
ApplicationMailer 是否继承自 ActionMailer::Base?
-
是的,ApplicationMailer 继承自 ActionMailler::Base。我使用
rails generate mailer生成了邮件。
标签: ruby-on-rails email actionmailer sidekiq nomethoderror