Rails 5:NoMethodError:MyMailer的未定义方法`helper'

时间:2016-12-14 17:23:15

标签: ruby-on-rails ruby devise ruby-on-rails-5 helper

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

  

Devise中的NoMethodError :: RegistrationsController #create   MyMailer的未定义方法`helper'(表不存在):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

你知道为什么这个班级找不到我的申请助手吗?

3 个答案:

答案 0 :(得分:2)

如果它真的是Mailer而不是Model,你应该继承ApplicationMailer而不是ApplicationRecord,否则它会在你的数据库中查找表来支持它。

class MyMailer < ApplicationMailer
   .....
end 

答案 1 :(得分:1)

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

rails g migration create_my_mailers

答案 2 :(得分:1)

错误是因为您在邮件程序中调用帮助程序。如果要在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