我想根据传递给邮件程序的参数为多个电子邮件分配相同的实例变量集。像这样:
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, pass parameters to invoked method
看起来我可以使用process_action
作为解决方法:Rails before_action for ActionMailer that would use mailer arguments
但有没有办法获取参数?它们是否超出范围?帮助
答案 0 :(得分:2)
这个?
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?()