Rails的5:NoMethodError:未定义的方法`帮手”的MyMailer

问题描述:

我有一个简单的轨道5应用与装置和后每当我尝试注册,我得到以下错误:Rails的5:NoMethodError:未定义的方法`帮手”的MyMailer

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 

你知道为什么这个类无法找到我的应用程序助手吗?

+0

你为什么不用'include ApplicationHelper'? – dp7

,如果它确实是一个邮递员,而不是一个型号,你应该从ApplicationMailer继承,而不是ApplicationRecord,否则它会在你的数据库中寻找表来支持它。

class MyMailer < ApplicationMailer 
    ..... 
end 

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

rails g migration create_my_mailers 
+0

现在告诉我:''method_missing':MyMailer的未定义方法'helper'(调用'MyMailer.connection'来建立连接):Class(NoMethodError)'我应该在哪里做? – jonhue

+0

你为什么写:'helper:application'?你想从'ApplicationHelper'的方法,写'include ApplicationHelper'。 –

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

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