有没有办法在某些回调之前和之后比较对象的状态?

时间:2012-09-14 02:33:46

标签: ruby-on-rails ruby

当我们网站上的评论被销毁时,after_destroy回调用于更新统计信息:

after_destroy do |p|
  p.topic.update_attribute(:replies, p.replies - 1)
end

我想在评论获得"软删除"时能够做同样的事情。当评论被软删除时,comment.visible字段将从1设置为0

有没有办法告诉在更新回调期间何时发生这种情况?类似的东西:

after_update do |p|
  if p.visible was changed from 1 to 0, then update stats.
    p.visible.update_attribute(:replies, p.replies - 1)
  end
end

1 个答案:

答案 0 :(得分:2)

您可以p.visible_changed?查看是否有所更改。您还可以使用ActiveModel::Dirty为您提供的其他方法查看更改内容以及更改内容,默认情况下,ActiveRecords提供此方法。