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
ただし、レンダリングは機能しません。welcome.html.erb
であっても、全員が標準の@user.is_photographer == true
を取得します。
mail()
を呼び出した後は、何もしようとしないでください。ただし、別のテンプレートを選択するには、オプションとして:template_name
を渡す必要があります。例えば:
template = @user.is_photographer ? "welcome_photographer" : "welcome"
mail(:to => "#{@user.name} <#{@user.email}>",
:subject => "Welcome to ...",
:template_name => template)
Sean Hillのソリューションは私には機能しません(Rails3.2以降)。 template_name
無視されているようです。私のために働いたのは次のようなものです:
mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...") do |format|
format.html { render 'templatename' }
end
おかしいRails 3.2.14これは私には機能しません:
mail(:to => "#{@user.name} <#{@user.email}>", :subject => "Welcome to ...") do |format|
format.html { render 'templatename' }
end
ただし、これは次のことを行います。
mail(:to => "#{@user.name} <#{@user.email}>",
:subject => "Welcome to ...",
:template_name => template)