3

特定のフィールドが更新されるたびにアラートをスローできるように、イベントを保存する前に確認したいと思います。「changed」を使用して検出しようとしましたが、update_attributesがdb検証をショートカットするため、changedを使用する方法がありませんか?

たとえば、これは変更に気づきます。

m = Player.new
m.name = "Tom"
m.changed?  
=> true  

しかし、これはしません:

m = Player.new
m.update_attributes!(name: "John")
m.changed?  
=> false

これを別の方法で行う方法はありますか?

4

3 に答える 3

2

changed?trueオブジェクトに永続的でない変更がある場合に戻ります。呼び出し後、オブジェクトは最新であるため、false戻ります。モジュールを確認してくださいActiveModel::Dirty。オブジェクトの変更を処理するためのユーティリティがいくつかあります。previous_changesトリックを行うことができ、おそらくあなたのユースケースにより適した方法があります。

于 2012-06-07T20:20:17.333 に答える
2

changed?これは、最後の保存ポイント以降に行われた変更を指していることを忘れないでください。呼び出すupdate_attributes!と、保存して変更を適用する効果があります。

メソッドと関連する呼び出しは、changed?保存されていないもののみを返します。

于 2012-06-07T20:22:04.510 に答える
0

あなたはただ使うことができます

m.attributes = {name: "John"}
于 2012-06-07T20:30:24.777 に答える