ruby-on-rails - 在 after_update 回调中获取更改的属性

标签 ruby-on-rails ruby activerecord

我正在尝试进行有条件的 after_update,我有以下内容:

  after_update do |participant|
    Rails.logger.info "#{self.previous_changes} changed."
    if self.previous_changes.include?(:current_distance)
      #Do my stuff ...
    end
  end

记录器打印空哈希:{}

如何检查哪个属性已更改?

我正在使用:participant.update_attribute(:current_distance, distance) 来更新属性。

最佳答案

您想使用 changes 而不是 previous_changes。您仍在同一个保存事务中,因此您正在寻找的是 changesprevious_changes 在更新完成后才会有信息。

RAILS 5.1.1:
使用 saved_changes 而不是 changes 因为它将在新版本中被弃用。

关于ruby-on-rails - 在 after_update 回调中获取更改的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22896912/

相关文章:

ruby-on-rails - ActionMailer - 如何添加附件?

ruby-on-rails - Rails 5 - 在编辑操作中使用范围来查找特定实例的相关子项

css - 使用 capybara 检查 CSS 是否已更新

mysql - 似乎无法找到 mysql 数据库

ruby-on-rails - 索引页的查询优化

ruby-on-rails - 如何在 Rails 4 中将关系作为子查询传递?

ruby-on-rails - ActiveRecord 查询比直接 SQL 慢得多?

ruby-on-rails - Ruby number_to_currency 显示一个完全错误的数字!

ruby-on-rails - 避免 `save!` on Has Many Through Association

ruby-on-rails - 删除在 crud 功能中不起作用(rails)