12

Rails にはダーティ/チェンジ フラグがあると聞きました。after_commit コールバックでそれを使用することは可能ですか?

私のユーザーモデルには次のものがあります。

after_commit :push_changes

def push_changes名前フィールドが変更されたかどうかを知る方法が欲しいです。それは可能ですか?

4

3 に答える 3

9

あなたはチェックするためにいくつかのことをすることができます...

何よりもまず、個々の属性を次のように確認できます。

user = User.find(1)
user.name_changed? # => false
user.name = "Bob"
user.name_changed? # => true

ただし、モデル全体で変更された属性を確認することもできます。

user = User.find(1)
user.changed     # => []
user.name = "Bob"
user.age = 42
user.changed     # => ['name', 'age']

他にもできることがいくつかあります。詳細については、 http://api.rubyonrails.org/classes/ActiveModel/Dirty.htmlを確認してください。

編集:

ただし、これがafter_commitコールバックで発生していることを考えると、モデルはすでに保存されています。つまり、保存前に発生した変更に関する知識は失われます。コールバックを使用before_saveして変更を自分で選択し、どこかに保存してから、を使用するときに再度アクセスしてみてafter_commitください。

于 2011-08-23T01:17:17.097 に答える