Rails before_update回调能够访问原始数据吗?

时间:2012-11-23 10:10:57

标签: ruby-on-rails ruby-on-rails-3 activerecord orm ruby-on-rails-3.2

我的before_update方法只有在特定字段发生更改时才需要更新另一个对象。我们是否可以访问原始数据,还是需要从数据库加载它?例如:

class Log < ActiveRecord::Base
  attr_accessible :points, :student_id
  belongs_to :student

  before_update :update_points

  private
  def update_points
    if points != original_log.points
      student.points += points - original_log.points
      student.save
    end
  end
end

我需要original_log或原始points。如果我无法访问数据库,我认为在def update_points下添加它是安全的吗?

original_log = Log.find(id)

1 个答案:

答案 0 :(得分:1)

我自己从未使用过它,但看起来ActiveModel会为您跟踪并提供points_was方法。所以以下内容应该有效:

def update_points
  if points != points_was
    student.points += points - points_was
    student.save
  end
end