加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 22:42:01 所属栏目:百科 来源:网络整理
导读:我正在处理一个功能,当一个记录字段值被成功更新后,我需要触发邮件到用户列表. 例如:我有一个博客模型已经发布属性(表示我的数据库表中的列),默认值为false.当用户发布博客时,字段值将变为true,我需要发送一些邮件. 哪个是最好的做法? 如果我可以使用after
我正在处理一个功能,当一个记录字段值被成功更新后,我需要触发邮件到用户列表.

例如:我有一个博客模型已经发布属性(表示我的数据库表中的列),默认值为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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读