gpt4 book ai didi

ruby-on-rails - 使用 ActionMailer 的 after_action 回调

转载 作者:行者123 更新时间:2023-12-01 07:44:53 35 4
gpt4 key购买 nike

我最近发现了 ActionMailer 的 after_action 回调,它有助于清理大量代码!我遇到的问题是在呈现电子邮件之后才执行回调。这使得您无法实例化任何变量以在 View 中使用。

例如,假设我的邮件程序中的所有电子邮件都需要包含用户的退订链接:

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 清理它,但回调是在 View 呈现后运行的,因此 View 无法访问实例变量。我不能使用 before_action,因为实例变量尚未实例化并且取决于操作的参数。

有什么方法可以把它弄干吗?

最佳答案

你可以使用 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 hash 允许使用一个 proc,当您调用 mail 方法时将对其进行评估,这在您的情况下是完美的。我还建议不要将 @unsubscribe_link 指定为实例变量。因为你已经传递了 @user 它已经完全过时了,你与 View 共享的实例变量越少越好,

关于ruby-on-rails - 使用 ActionMailer 的 after_action 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34233306/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com