我的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)
答案 0 :(得分:1)
我自己从未使用过它,但看起来ActiveModel会为您跟踪并提供points_was
方法。所以以下内容应该有效:
def update_points
if points != points_was
student.points += points - points_was
student.save
end
end