0

保存時にオブジェクトから以前の値を取得しようとしています。次のシナリオを考えてみてください。

@object = {:name => 'Dan', :occupation => '学生'}
@object[:occupation] = '正社員'
@object.value_was[:occupation] # => '学生'

方法がないことは十分理解できると思いvalue_wasます。さらに、モデルオブジェクトでも同じことをしたいと思います:

@学生 = Student.find(1)
@student.occupation = '正社員'
@student.save
@student.value_was(:occupation) # => '学生'

どんな助けでも大歓迎です。

それは本当に役に立ちます

4

1 に答える 1

5

ActiveModel には、変更されたフィールドの前後の状態を保持する「ダーティ フィールド マーキング」のサポートが含まれています。

を使用@student.occupation_wasして、 の前の値をoccupation取得@student.occupation_changed?したり、値が変更されたかどうかを取得したりできます。

保存すると値の変更された状態がリセットされるため、これは保存前にのみ機能します。ただし、レコードが保存された後に使用する必要がある場合は、 before_save コールバックでこのデータをキャプチャできます。すべての変更を保持するには、たとえば で複製#changed_attributesし、それらを照会します。before_save

于 2012-11-30T00:23:12.113 に答える