0

私の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)
4

1 に答える 1

1

私自身は使ったことはありませんが、ActiveModel が追跡してpoints_wasメソッドを提供してくれるようです。したがって、次のように動作するはずです。

def update_points
  if points != points_was
    student.points += points - points_was
    student.save
  end
end
于 2012-11-23T10:22:59.870 に答える