我在网站上搜索了如何完成此操作,许多答案指向使用changed?
方法。我试图在保留数据库后通知用户更新,所以不幸的是这不起作用。
然后我找到了previous_changes
方法,但这也是在首次创建帖子时触发的。目标是仅执行此操作。怎么办呢?
<% if @post.previous_changes %>
<span>Updated:</span> <span><%= time_ago_in_words(@post.updated_at) %> ago</span>
<% end %>
答案 0 :(得分:0)
一种可能的解决方案是在元素更新时设置标志。
class Model
after_update :flag_update
def updated?
!!@updated
end
private
def flag_update
@updated = true
end
end
然后在您的代码中,只需检查@post.updated?
。
答案 1 :(得分:0)
时有更新的记录
CHARACTER_LIMIT
答案 2 :(得分:0)
听起来非常适合使用after_update
callback并在其中调用作业来发送电子邮件,短信或任何通知用户的方式。
使用回调来标记模型实例基本上会为模型添加状态,并且只能工作一次,因为它是在第一次更新后设置的。任何后续更新都可能会被忽视,具体取决于您想要通知用户的内容和方式,除非您能以某种方式重置状态(标记),这可能比它的价值要多得多。
依赖于updated_at
时间戳大于created_at
会遭遇与标记相同的一次性机会。
我们使用了一种方法,我们在保存之前检查了模型changes
返回的内容(您还可以使用changed?
),然后在成功保存后发送通知。
答案 3 :(得分:0)
如果您能够致电previous_changes
,为什么不添加条件以确保id
未被更改(根据此answer):
<% if @post.previous_changes && !@post.id_changed? %>
...
<% end %>