我正在开发一项功能,我需要在记录字段值成功更新后触发邮件到用户列表。
例如:我有一个Blog模型,它具有已发布的属性(表示我的数据库表中的一列),默认值为false。当用户发布博客时,字段值将变为true,我需要发送一些邮件。
非常感谢任何帮助...
答案 0 :(得分: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
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