bri*_*ran 35 ruby-on-rails actionmailer ruby-on-rails-3
我正在尝试从ActionMailer(Rails 3.1.1)中进行不同模板的条件渲染.我希望大多数用户获得普通welcome.html.erb模板,但有些用户可以获得特殊welcome_photographer.html.erb模板.这种类型的东西在ActionController中工作:
# (in /app/mailers/user_mailer.rb)
def welcome(user)
@user = user
mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...")
render "welcome_photographer" if @user.is_photographer
end
Run Code Online (Sandbox Code Playgroud)
但渲染不起作用 - 每个人都获得标准,welcome.html.erb即使@user.is_photographer == true
Sea*_*ill 54
打电话后,你不应该尝试做任何事情mail().但是,要选择其他模板,您应该:template_name作为选项传递.例如:
template = @user.is_photographer ? "welcome_photographer" : "welcome"
mail(:to => "#{@user.name} <#{@user.email}>",
:subject => "Welcome to ...",
:template_name => template)
Run Code Online (Sandbox Code Playgroud)
Sean Hill的解决方案对我不起作用(Rails 3.2+).template_name似乎被忽略了.对我有用的是这样的:
mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...") do |format|
format.html { render 'templatename' }
end
Run Code Online (Sandbox Code Playgroud)
有趣的轨道3.2.14这对我不起作用:
mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...") do |format|
format.html { render 'templatename' }
end
Run Code Online (Sandbox Code Playgroud)
但这样做:
mail(:to => "#{@user.name} <#{@user.email}>",
:subject => "Welcome to ...",
:template_name => template)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12092 次 |
| 最近记录: |