ruby-on-rails – Rails – ActiveRecord – 在更改字段值时触发邮件

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – Rails – ActiveRecord – 在更改字段值时触发邮件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在处理一个功能,当一个记录字段值被成功更新后,我需要触发邮件用户列表.

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

哪个是最好的做法?
>如果我可以使用after_update回调,我将如何知道发布的列在最后一次更新调用期间被更新?
>更新后有没有办法访问已发布属性的旧值?

任何帮助高度赞赏…

解决方法

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

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

更新:

只有在首次将字段从“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

猜你在找的Ruby相关文章