我有大约30个mailer方法,我将用户作为参数传递因为我需要访问视图中的@user变量,所以我必须在每个mailer方法中设置这个实例变量,例如send_x_email(user)。
通常这是在一个初始化方法中完成的,但是我已经读到邮件程序的行为有点不同另外,一些方法采用不同数量的参数(一个只接受用户,另一个接受用户和消息)。
我在行动回电前调查过,看了这个帖子
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

最佳答案

尝试在类中定义一个“mail”方法,并在其中声明一个实例变量,例如。

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”选项。
我的建议是保持现状。在所有的mailer方法中不必使用“@user=user”也不错。

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

10-08 22:13