2011-11-21 38 views
28

Tôi đang cố gắng thực hiện kết xuất có điều kiện của một mẫu khác từ ActionMailer (Rails 3.1.1). Tôi muốn hầu hết người dùng nhận được mẫu welcome.html.erb bình thường, nhưng một số người dùng có được mẫu welcome_photographer.html.erb đặc biệt. Đây là loại điều làm việc trong ActionController:Làm cho Chế độ xem khác nhau (mẫu) cho ActionMailer

# (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 

Nhưng render không hoạt động - tất cả mọi người được chuẩn welcome.html.erb ngay cả khi @user.is_photographer == true

Trả lời

45

Bạn không nên cố gắng làm bất cứ điều gì sau khi bạn gọi mail(). Tuy nhiên, để chọn một mẫu khác, bạn nên vượt qua :template_name làm tùy chọn. Ví dụ:

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

hoàn hảo - nhờ – brittohalloran

+0

Tôi biết đây là một câu trả lời cũ, nhưng tôi đã tìm thấy nó ngay hôm nay. Nên ': template_name => template' thay vì là': template_name => "template" '? Tôi đã thử nó theo cách của bạn và kết thúc lên đến các tài liệu mà hiển thị nó như là một chuỗi. – Tass

+0

'mẫu' là một biến được đặt thành một chuỗi trên dòng đầu tiên. Dựa trên việc người dùng có phải là nhiếp ảnh gia hay không, 'template' hoặc là" welcome_photographer "' hoặc '" welcome "'. –

8

Giải pháp từ Sean Hill không hoạt động cho tôi (Rails 3.2+). template_name dường như bị bỏ qua. Có gì làm việc đối với tôi là một cái gì đó như thế này:

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

Hài hước trong đường ray 3.2.14 này không làm việc cho tôi:

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

Tuy nhiên điều này không:

mail(:to => "#{@user.name} <#{@user.email}>", 
:subject => "Welcome to ...", 
:template_name => template) 
+1

Tôi tìm thấy khối có 'do' và' format.html' được trợ giúp khi hiển thị từ một thư mục con khác không thuộc về bưu phẩm. Cảm ơn – mjnissim

Các vấn đề liên quan