Rails - ActiveRecord - 触发更改字段值的邮件

nkm*_*nkm 12 activerecord ruby-on-rails

我正在开发一个功能,我需要在记录字段值成功更新后触发邮件到用户列表.

例如:我有一个Blog模型,它具有已发布的属性(表示我的数据库表中的一列),默认值为false.当用户发布博客时,字段值将变为true,我需要发送一些邮件.

  1. 这是最好的方法吗?
  2. 如果我可以使用after_update回调,我将如何知道在上次更新调用期间已发布的列已更新?
  3. 有没有办法在更新后访问已发布属性的旧值?

任何帮助都非常感谢...

Wiz*_*Ogz 29

1)可能有点主观,但我会回答2)ActiveRecord提供指示属性是否已更改的方法.您可以使用属性名称+ _changed?.例如,如果您的模型具有name属性,那么它也将响应#name_changed? 以下是仅在属性已更改时才能发送电子邮件的一种方法:

class MyModel
  after_update :send_email, :if => :column_name_changed?

  def send_email
    # Send email here
  end
end
Run Code Online (Sandbox Code Playgroud)

3)可以通过追加来访问旧的属性值_was.例如,#name_was将返回name字段的旧值.

更新:

要在第一次将字段从false切换为true时发送电子邮件,您需要在数据库中添加另一个字段,例如email_sent.由于send_email回调的条件变得更加复杂,我将其移入回调本身.发送电子邮件后,将该email_sent字段设置为true,以便不再发送电子邮件.

class MyModel
  after_update :send_email

  def send_email
    if column_name_changed? && !email_sent?
      # Send email here
      update_attribute :email_sent, true
    end
  end
end
Run Code Online (Sandbox Code Playgroud)