(นี่เป็นคำถามเก่า แต่ Rails ได้รับการพัฒนาดังนั้นฉันจึงแบ่งปันสิ่งที่ใช้ได้กับฉันใน Rails 5.2)
โดยทั่วไปแล้วคุณอาจต้องการใช้ตัวช่วยมุมมองที่กำหนดเองในการแสดงบรรทัดหัวเรื่องของอีเมลเช่นเดียวกับ HTML ในกรณีที่มุมมองผู้ช่วยเหลืออยู่ในแอพ / ผู้ช่วยเหลือ / application_helper.rbดังนี้:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
ฉันสามารถสร้างหัวเรื่องหัวเรื่องอีเมลและเทมเพลตแบบไดนามิกซึ่งทั้งคู่ใช้ตัวช่วย แต่ฉันต้องบอก Rails ให้ใช้ ApplicationHelper อย่างชัดเจนในแอพ / mailer / user_mailer.rbในสองวิธีที่แตกต่างกันดังที่คุณเห็นในบรรทัดที่สองและสามที่นี่ :
class UserMailer < ApplicationMailer
include ApplicationHelper # This enables me to use mydate in the subject line
helper :application # This enables me to use mydate in the email template (party_thanks.html.erb)
def party_thanks
@party = params[:party]
mail(to: 'user@domain.com',
subject: "Thanks for coming on #{mydate(@party.created_at, @party.timezone)}")
end
end
ฉันควรพูดถึงว่าทั้งสองบรรทัดทำงานได้ดีดังนั้นให้เลือกอย่างใดอย่างหนึ่ง:
helper :application
add_template_helper(ApplicationHelper)
FWIW เทมเพลตอีเมลที่app / views / user_mailer / party_thanks.html.erbมีลักษณะดังนี้:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
และแอพ / คอนโทรลเลอร์ / party_controller.rbจะมีลักษณะเช่นนี้
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
ฉันได้เห็นด้วยกับ OP (@ Tom Lehman) และ @gabeodess ที่ว่านี้รู้สึกทั้งหมดที่ซับซ้อนค่อนข้างได้รับhttps://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpersดังนั้นบางทีฉันไม่มีอะไร .. .