Render Different View (template) for ActionMailer

霸气de小男生 提交于 2019-12-03 01:03:33
Sean Hill

You shouldn't try to do anything after you call mail(). However, to choose another template, you should pass :template_name as an option. For example:

template = @user.is_photographer ? "welcome_photographer" : "welcome"
mail(:to => "#{@user.name} <#{@user.email}>", 
     :subject => "Welcome to ...", 
     :template_name => template)

The solution from Sean Hill doesn't work for me (Rails 3.2+). template_name seems to be ignored. What worked for me is something like this:

mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...") do |format|
  format.html { render 'templatename' }
end

Funny in rails 3.2.14 This does NOT work for me:

mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...") do |format|
  format.html { render 'templatename' }
end

However this does:

mail(:to => "#{@user.name} <#{@user.email}>", 
 :subject => "Welcome to ...", 
:template_name => template)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!