Rails 4.1 Mailer预览和设计自定义电子邮件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails 4.1 Mailer预览和设计自定义电子邮件相关的知识,希望对你有一定的参考价值。
我有一个全新的Rails 4.1.1应用程序,我在自定义Devise电子邮件。我想让它们显示在新的Rails电子邮件预览功能上,所以我做了以下事情:
1)在我的config/development.rb
文件中添加了以下代码段:
config.action_mailer.preview_path = "#{Rails.root}/lib/mailer_previews"
2)在UserMailer
创建我的自定义Devise电子邮件app/mailers/user_mailer.rb
:
class UserMailer < Devise::Mailer
helper :application # gives access to all helpers defined within `application_helper`.
include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
layout "notifications_mailer"
end
3)更改了config/initializers/devise.rb
以包含以下代码段:
config.mailer = 'UserMailer'
4)将UserMailerPreview
课程添加到lib/mailer_previews
,内容如下:
class UserMailerPreview < ActionMailer::Preview
def confirmation_instructions
UserMailer.confirmation_instructions(User.first, {})
end
def reset_password_instructions
UserMailer.reset_password_instructions(User.first, {})
end
def unlock_instructions
UserMailer.unlock_instructions(User.first, {})
end
end
到现在为止还挺好。看起来我已经做好了一切。但后来我尝试在/ rails / mailers / user_mailer / confirmation_instructions路线上看到confirmation_instructions
电子邮件的预览,我收到以下错误:
undefined method `confirmation_url' for #<#<Class:0x007fa02ab808e0>:0x007fa030fb7e80>
我的confirmation_url.html.erb
模板的代码如下所示:
<%= t("notifications.texts.greeting") + @user.display_name %>,
<p>You can confirm your account email through the link below:</p>
<p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @token) %></p>
我究竟做错了什么?我想我称之为confirmation_url
方法的方式有问题。有人可以帮我吗?
我发现了这个问题,因为我试图弄清楚如何自己预览Devise电子邮件。我几乎完全复制了你的代码,它对我来说很好。
我做的唯一不同的是从layout "notifications_mailer"
删除行UserMailer
- 当我包括它时,我收到一条错误消息Missing template layouts/notifications_mailer
。如果删除它会发生什么?
线Devise::Controllers::UrlHelpers
肯定包括方法confirmation_url
(你可以通过打开Rails控制台并运行include Devise::Controllers::UrlHelpers
然后confirmation_url
看到这个,所以我怀疑问题是你的预览根本没有被UserMailer
呈现。我不是确定为什么,但layout "notifications_mailer"
线可能是罪魁祸首。
你有一个名为NotificationsMailer
的课程吗?包括Devise::Controllers::UrlHelpers
在那里解决你的问题?
对于那些希望在不使用自定义邮件程序的情况下预览Devise电子邮件的人(但仍然是自定义电子邮件),这就是我所做的:
- 配置您的应用以进行电子邮件预览。
- 设置Devise Mailer Preview类
一个。 Rails~> 4.1
# mailer/previews/devise_mailer_preview.rb class Devise::MailerPreview < ActionMailer::Preview def confirmation_instructions Devise::Mailer.confirmation_instructions(User.first, "faketoken") end def reset_password_instructions Devise::Mailer.reset_password_instructions(User.first, "faketoken") end ... end
湾Rails~> 5.0class DeviseMailerPreview < ActionMailer::Preview ... # same setup as Rails 4 above
- 重启服务器
使用Rails 5并发现语法与@ steel的优秀答案略有不同,使用双“::”作为区别:
# Preview all emails at http://localhost:3000/rails/mailers/devise_mailer
class DeviseMailerPreview < ActionMailer::Preview
def reset_password_instructions
Devise::Mailer.reset_password_instructions(User.first, "faketoken")
end
end
当您忘记在模型中包含必要的设计模块时,您将获得设计URL助手的未定义方法。例如如果您的模型是User
并且您想要confirmation_url
,则必须确保包含:confirmable
模块:
devise <...snipped...>, :confirmable
请注意,如果此模块当前未加载,您的应用程序很可能不会使用例如确认!
包括:确认模块可能会锁定所有用户。见https://github.com/plataformatec/devise/wiki/How-To:-Add-:confirmable-to-Users
以上是关于Rails 4.1 Mailer预览和设计自定义电子邮件的主要内容,如果未能解决你的问题,请参考以下文章
在 Rails 3.1 中为 Mailer 和 View 提供自定义助手