【问题标题】:Rails 5: NoMethodError: undefined method `helper' for MyMailerRails 5:NoMethodError:MyMailer 的未定义方法“helper”
【发布时间】:2016-12-14 17:23:15
【问题描述】:

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

Devise::RegistrationsController#create 中的 NoMethodError MyMailer 的未定义方法 `helper'(表不存在):类

错误出现在第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

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

【问题讨论】:

  • 你为什么不做include ApplicationHelper

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


【解决方案1】:

如果它真的是一个邮件程序而不是模型,你可能应该从ApplicationMailer 继承而不是ApplicationRecord,否则它将在你的数据库中寻找表来支持它。

class MyMailer < ApplicationMailer
   .....
end 

【讨论】:

    【解决方案2】:

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

    rails g migration create_my_mailers
    

    【讨论】:

    • 它现在告诉我:``method_missing': undefined method helper' for MyMailer (call 'MyMailer.connection' to establish a connection):Class (NoMethodError) 我应该在哪里做呢?
    • 你为什么写:helper :application?你想要来自ApplicationHelper的方法,写include ApplicationHelper
    【解决方案3】:

    错误是因为您在 Mailer 中调用了 helper。如果您想在您的邮件程序中包含应用程序助手或任何助手,您必须使用“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
    

    【讨论】:

      猜你喜欢
      • 2017-01-03
      • 1970-01-01
      • 2016-06-28
      • 2017-02-24
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多