Я хочу назначить один и тот же набор переменных экземпляра для нескольких писем на основе аргумента, переданного в почтовую программу. Что-то вроде этого:
class UserMailer < ActionMailer::Base
before_action -> { set_defaults(order) }, only: [:email1, :email2]
def email1(order)
...
end
def email2(order)
...
end
private
set_defaults(order)
@order = order
@customer = order.customer
@price = order.price
end
end
Я вижу, что вы можете передать params
, strings
и т.п. в before_actions в контроллерах: Rails 4 before_action, передать параметры вызываемому методу
И похоже, что я могу использовать process_action
в качестве обходного пути: Rails before_action для ActionMailer, который будет использовать аргументы почтовой программы
Но есть ли способ получить доступ к аргументам? Они выходят за рамки? Помощь.
1 ответ
Эта ?
DO_ME_BEFORE = [:email1, :email2]
def process_action(*args)
return super unless DO_ME_BEFORE.include?(args[0].to_sym)
@order = args[1]
@customer = @order.customer
@price = @order.price
super
end
Редактировать: Я не думаю, что вы можете перехватить точно так же, как с before_action
, но вы можете смоделировать это, поскольку ваш args[0]
будет именем метода. Если вы записываете массив разрешенных методов в виде строк, вам не нужно вызывать .to_sym
на args[0]
на .include?()
Похожие вопросы
Связанные вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.
process_action
, как описано во второй ссылке.