У меня есть около 30 методов почтовой программы, где я передаю пользователя в качестве аргумента. Поскольку мне нужен доступ к переменной @user в представлении, мне нужно установить эту переменную экземпляра в каждом методе почтовой программы, например send_x_email (пользователь).Установка переменных экземпляра в ActionMailer
Обычно это было бы сделано с помощью метода initialize, но я читал, что почтовые программы действуют несколько иначе. Кроме того, некоторые из методов принимают различное количество аргументов (один просто берет пользователя, другой принимает пользователя и сообщение).
Я исследовал before_action обратных вызовов и смотрел на этот пост
Setting instance variables in Action Mailer?
... но я до сих пор застрял.
Я был бы признателен за любые мысли о том, как упростить вещи и удалить @user = пользователь из 30 или около того методов в классе почтовой программы. Ура!
class ReminderSender < ActionMailer::Base
def send_commands_email(user)
@user = user
mail(to: @user.email,
subject: "All Commands",
from: "<[email protected]#{ENV['DOMAIN']}>")
end
def send_attachment_warning(user, message)
@user = user
@message = message
mail(to: @user.email,
subject: "Attachment Warning",
from: "<[email protected]#{ENV['DOMAIN']}>")
end
end
Согласитесь: устанавливайте '@ user' во всех методах. Фактически вы можете думать о методах почтовой рассылки, аналогичных действиям контроллера. В действии контроллера вы не думаете дважды о настройке переменных экземпляра для каждого метода, потому что вы знаете, что для каждого запроса создается новый экземпляр контроллера, и только одно действие когда-либо называется. – jjm