(C'est une vieille question mais Rails a évolué, donc je partage ce qui fonctionne pour moi dans Rails 5.2.)
En règle générale, vous souhaiterez peut-être utiliser un assistant d'affichage personnalisé pour afficher la ligne d'objet d'un e-mail ainsi que le code HTML. Dans le cas où l'assistant de vue se trouve dans app / helpers / application_helper.rb comme suit:
module ApplicationHelper
def mydate(time, timezone)
time.in_time_zone(timezone).strftime("%A %-d %B %Y")
end
end
Je peux créer une ligne d'objet et un modèle d'e-mail dynamiques qui utilisent tous deux l'aide, mais je dois dire à Rails d'utiliser explicitement ApplicationHelper dans apps / mailer / user_mailer.rb de deux manières différentes, comme vous pouvez le voir dans les deuxième et troisième lignes ici :
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
Je dois mentionner que ces deux lignes fonctionnent tout aussi bien, alors choisissez l'une ou l'autre:
helper :application
add_template_helper(ApplicationHelper)
FWIW, le modèle d'e-mail à app / views / user_mailer / party_thanks.html.erb ressemble à ceci:
<p>
Thanks for coming on <%= mydate(@party.created_at, @party.timezone) %>
</p>
Et le contrôleur app / controller / party_controller.rb ressemble à ceci
class PartyController < ApplicationController
...
def create
...
UserMailer.with(party: @party).party_thanks.deliver_later
...
end
end
Je dois être d'accord avec OP (@Tom Lehman) et @gabeodess que tout cela semble assez compliqué compte tenu de https://guides.rubyonrails.org/action_mailer_basics.html#using-action-mailer-helpers alors peut-être que je manque quelque chose .. .