Rails にはダーティ/チェンジ フラグがあると聞きました。after_commit コールバックでそれを使用することは可能ですか?
私のユーザーモデルには次のものがあります。
after_commit :push_changes
def push_changes
名前フィールドが変更されたかどうかを知る方法が欲しいです。それは可能ですか?
Rails にはダーティ/チェンジ フラグがあると聞きました。after_commit コールバックでそれを使用することは可能ですか?
私のユーザーモデルには次のものがあります。
after_commit :push_changes
def push_changes
名前フィールドが変更されたかどうかを知る方法が欲しいです。それは可能ですか?
あなたはチェックするためにいくつかのことをすることができます...
何よりもまず、個々の属性を次のように確認できます。
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
ください。