Rails 5: NoMethodError: undefined method `helper' for MyMailer

Rails 5: NoMethodError: undefined method `helper' for MyMailer

我有一个简单的 rails 5 应用程序和设计,每当我尝试注册时,我都会收到以下错误:

NoMethodError in Devise::RegistrationsController#create undefined method `helper' for MyMailer(Table doesn't exist):Class

第2行出现错误:

class MyMailer < ApplicationRecord 
    helper :application # gives access to all helpers defined within `application_helper`.
    include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
    default template_path: 'devise/mailer' # to make sure that your mailer uses the devise views
end

你知道为什么这个 class 找不到我的应用助手吗?

对于您 Rails 应用程序中的每个模型,都应该存在一个 table,以模型名称的复数形式命名。所以在你的情况下,由于你的模型名称是:MyMailer 所以你应该创建一个 table 命名为:my_mailers.

rails g migration create_my_mailers

错误是因为您在邮件程序中调用了帮助程序。如果你想在你的 Mailer 中包含应用程序助手或任何助手,你必须使用 "include" 关键字。

 class MyMailer < ApplicationRecord 
    helper :application # This line is causing the error 
    include Devise::Controllers::UrlHelpers 
    default template_path: 'devise/mailer'
end

这就是您应该如何包含您的应用程序助手

class MyMailer < ApplicationRecord 
    include ApplicationHelper
    include Devise::Controllers::UrlHelpers 
    default template_path: 'devise/mailer'
end

如果它确实是一个 Mailer 而不是一个模型,您应该继承自 ApplicationMailer 而不是 ApplicationRecord,否则它将在您的数据库中寻找表以支持它。

class MyMailer < ApplicationMailer
   .....
end