如何检查模型实例是否已更新

时间:2015-12-08 19:48:55

标签: ruby-on-rails ruby activerecord conditional

我在网站上搜索了如何完成此操作,许多答案指向使用changed?方法。我试图在保留数据库后通知用户更新,所以不幸的是这不起作用。

然后我找到了previous_changes方法,但这也是在首次创建帖子时触发的。目标是仅执行此操作。怎么办呢?

<% if @post.previous_changes %>
  <span>Updated:</span> <span><%= time_ago_in_words(@post.updated_at) %> ago</span>
<% end %>

4 个答案:

答案 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 %>