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
我有一个简单的 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