gpt4 book ai didi

ruby - 在 ActionMailer 中设置实例变量

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:01 24 4
gpt4 key购买 nike

我有大约 30 个将用户作为参数传递的邮件程序方法。因为我需要访问 View 中的@user 变量,所以我必须在每个邮件程序方法中设置这个实例变量,例如 send_x_email(user)。

通常这会在初始化方法中完成,但我读到邮件程序的行为有点不同。此外,一些方法采用不同数量的参数(一个只采用用户,另一种采用用户和消息)。

我调查了 before_action 回调并查看了这篇文章

Setting instance variables in Action Mailer?

...但我仍然卡住了。

对于如何简化事情并从 mailer 类的 30 多个方法中删除 @user = user 的任何想法,我将不胜感激。干杯!

class ReminderSender < ActionMailer::Base
def send_commands_email(user)
@user = user
mail(to: @user.email,
subject: "All Commands",
from: "<commands@#{ENV['DOMAIN']}>")
end

def send_attachment_warning(user, message)
@user = user
@message = message
mail(to: @user.email,
subject: "Attachment Warning",
from: "<attachments@#{ENV['DOMAIN']}>")
end
end

最佳答案

尝试在您的类中定义一个“邮件”方法并在那里声明一个实例变量,例如

class YouMailer

def send_email(user, message)
subject = 'something'
body = message

mail(user, {subject: subject, body: body}})
end

def mail(user, options={})
@user = user
mail_options = {to: @user.email}.merge(options)

super(mail_options)
end
end

但您可能需要为该策略指定“template_path”和“template_name”选项。

我的建议是保持现状。出于必要,在所有邮件程序方法中使用“@user = user”也不错。

关于ruby - 在 ActionMailer 中设置实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516574/

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