这可能是一个愚蠢的问题,但是当我在Rails中组合一个HTML电子邮件时,有没有一种特别容易的内置方法来在浏览器中预览它的模板,或者我需要编写某种自定义控制器来将它作为它的视图?
发布于 2013-12-18 00:47:05
Action Mailer现在有一个内置的previewing emails in 方式。例如,查看以下内容:
# located in test/mailers/previews/notifier_mailer_preview.rb
class NotifierPreview < ActionMailer::Preview
# Accessible from http://localhost:3000/rails/mailers/notifier/welcome
def welcome
Notifier.welcome(User.first)
end
end
发布于 2011-08-23 18:54:18
丹尼尔的answer是一个很好的开始,但是如果你的电子邮件模板包含任何动态数据,它就不会工作。例如,假设您的电子邮件是一个订单收据,并且在其中打印出@order.total_price
-使用前面的方法,@order
变量将为空。
下面是我使用的一个小食谱:
首先,由于此电子邮件预览功能肯定仅供内部使用,因此我在admin名称空间中设置了一些通用路由:
#routes.rb
MySite::Application.routes.draw do
namespace :admin do
match 'mailer(/:action(/:id(.:format)))' => 'mailer#:action'
end
end
接下来,我创建控制器。在这个控制器中,我为每个电子邮件模板创建一个方法。由于大多数电子邮件包含动态数据,因此我们需要填充模板所需的任何成员变量。
这可以用fixture来完成,但我通常更喜欢抓取一些伪随机的真实数据。记住--这不是单元测试--这纯粹是一个开发辅助工具。它不需要每次都产生相同的结果--事实上--如果不是这样可能会更好!
#app/controllers/admin/mailer_controller.rb
class Admin::MailerController < Admin::ApplicationController
def preview_welcome()
@user = User.last
render :file => 'mailer/welcome.html.erb', :layout => 'mailer'
end
end
请注意,当我们呈现模板时,我们使用layout=>:mailer
。这会将电子邮件的正文嵌入到您创建的HTML电子邮件布局中,而不是典型的web应用布局(例如application.html.erb
)中。
差不多就是这样了。现在,我可以访问http://example.com/admin/mailer/preview_welcome预览对我的欢迎电子邮件模板的更改。
发布于 2012-04-27 20:09:05
37Signals也有自己的邮件测试工具,叫做mail_view。这真是太棒了。
https://stackoverflow.com/questions/7165064
复制相似问题