我正在处理一个功能,当一个记录字段值被成功更新后,我需要触发邮件到用户列表.
例如:我有一个博客模型已经发布属性(表示我的数据库表中的列),默认值为false.当用户发布博客时,字段值将变为true,我需要发送一些邮件.
哪个是最好的做法?
>如果我可以使用after_update回调,我将如何知道发布的列在最后一次更新调用期间被更新?
>更新后有没有办法访问已发布属性的旧值?
任何帮助高度赞赏…
解决方法
1)可能有点主观,但我会回答,2)
ActiveRecord提供了指示属性是否已更改的方法.您可以使用属性名_changed?例如.如果你的模型有一个name属性,那么它也会响应#name_changed?以下是一种只有在属性更改时才能发送电子邮件的方式:
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