ruby - 在 ActionMailer 中设置实例变量

标签 ruby ruby-on-rails-3 ruby-on-rails-4 actionmailer instance-variables

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

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

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

Setting instance variables in Action 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”选项。

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

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

相关文章:

ruby - 在使用 ruby​​ 中的 "mail"gem 阅读电子邮件时需要帮助

ruby-on-rails - Rails 通知消息插件?

ruby-on-rails - 有人可以帮我理解这一行代码吗?

ruby-on-rails-3 - 如何在 CSS 中使用 wicked_pdf 的背景图像

ruby-on-rails-3 - 本地化月份名称 simple_form Rails

ruby-on-rails - 解释查询的输出

html - 是否可以在 Netbeans IDE 中自动完成 HTML 标记?

ruby-on-rails - Rails 3的示例应用程序?

ruby-on-rails - 在 url 中,如何在 ruby​​ on rails 中显示标题名称而不是 id?

ruby-on-rails - 带有 Rails 4 的 ActiveRecord 信誉系统 gem