我最近发现了ActionMailer的after_action回调,它帮助清理了很多代码!我遇到的问题是在电子邮件呈现之后才会执行回调。这使得您无法实例化视图中使用的任何变量。
例如,假设我的邮件中的所有电子邮件都需要包含用户的取消订阅链接:
class BaseMailer < ActionMailer::Base
def email1(user)
@user = user
include_unsubscribe_link
...
end
def email2(user)
@user = user
include_unsubscribe_link
...
end
#...more actions
private
def include_unsubscribe_link
headers['List-Unsubscribe'] = @unsubscribe_link = @user.unsubscribe_link
end
end
使用after_action清理它会很棒,但是在呈现视图后运行回调,因此视图无法访问实例变量。我不能使用before_action,因为实例变量尚未实例化,并且取决于操作的参数。
有什么方法可以干这个吗?
答案 0 :(得分:0)
您可以使用default
class BaseMailer < ActionMailer::Base
default 'List-Unsubscribe' => proc { @user.unsubscribe_link }
def email1(user)
@user = user
...
mail
end
def email2(user)
@user = user
...
mail
end
#...more actions
default
哈希允许使用proc,当你调用mail
方法时将对其进行评估,这在你的情况下是完美的。我还建议不要将@unsubscribe_link
指定为实例变量。由于您已经传递@user
,因此它已完全过时,您与视图共享的实例变量越少越好,