(Ini adalah pertanyaan lama tetapi Rails telah berevolusi jadi saya berbagi apa yang cocok untuk saya di Rails 5.2.)
Biasanya Anda mungkin ingin menggunakan penolong tampilan khusus dalam merender baris subjek email dan juga HTML. Dalam kasus di mana view helper ada di app / helpers / application_helper.rb sebagai berikut:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Saya dapat membuat baris subjek dan templat email dinamis yang sama-sama menggunakan helper, tetapi saya harus memberi tahu Rails untuk menggunakan ApplicationHelper secara eksplisit di apps / mailer / user_mailer.rb dengan dua cara berbeda, seperti yang Anda lihat di baris kedua dan ketiga di sini :
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
Saya harus menyebutkan bahwa kedua baris ini bekerja dengan baik jadi pilih satu atau yang lain:
helper :application
add_template_helper(ApplicationHelper)
FWIW, templat email di app / views / user_mailer / party_thanks.html.erb terlihat seperti ini:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
Dan pengontrol app / controller / party_controller.rb terlihat seperti ini
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Saya harus setuju dengan OP (@ Tom Lehman) dan @ gabeodess bahwa ini semua terasa cukup berbelit-belit karena https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mail-mailer-helpers jadi mungkin saya kehilangan sesuatu .. .