(Esta es una vieja pregunta, pero Rails ha evolucionado, así que comparto lo que funciona para mí en Rails 5.2).
Por lo general, es posible que desee utilizar un asistente de vista personalizado para representar la línea de asunto de un correo electrónico, así como el HTML. En el caso en que el ayudante de vista esté en app / helpers / application_helper.rb de la siguiente manera:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Puedo crear una línea y una plantilla de asunto de correo electrónico dinámico que usan el ayudante, pero necesito decirle a Rails que use el ApplicationHelper explícitamente en apps / mailer / user_mailer.rb de dos maneras diferentes, como puede ver en la segunda y tercera líneas aquí :
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
Debo mencionar que estas dos líneas funcionan igual de bien, así que elija una u otra:
helper :application
add_template_helper(ApplicationHelper)
FWIW, la plantilla de correo electrónico en app / views / user_mailer / party_thanks.html.erb se ve así:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
Y el controlador app / controller / party_controller.rb se ve así
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Tengo que estar de acuerdo con OP (@Tom Lehman) y @gabeodess en que todo esto se siente bastante complicado dado https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers, así que quizás me estoy perdiendo algo ... .