[解決済み] ActiveRecordを使用して、after_update時にレコードの古い値を取得する方法はありますか?
質問
簡単な例で設定します。
私は1つのテーブル(
Totals
の合計を保持するテーブルがあります。
amount
カラムの合計を保持するテーブル (
Things
).
がある場合
thing.amount
が更新されたとき、単純に古い値と新しい値の差分を
total.sum
.
今、私は
self.amount
の間に
before_update
を追加し
self.amount
の間に
after_update
. これは、アップデートが成功することに過度の信頼を置いています。
制約です。 単純に全取引の合計を再計算したいわけではないのですが。
質問です。
簡単に言うと、私は
after_update
コールバック中に元の値にアクセスしたいです。 あなたはこれを行うためにどのような方法を考え出したのですか?
更新しました。
Luke Franclのアイデアに賛成です。 の間に
after_update
のコールバックの間、あなたはまだ
self.attr_was
の値にもアクセスできます。 また、私は
after_update
実装にすることにしました。なぜなら、この種のロジックをモデル内に保持したいからです。 こうすることで、今後どのようにトランザクションを更新することになっても、トランザクションの合計を正しく更新していることを確認できます。実装の提案をしてくれた皆さん、ありがとうございました。
どのように解決するのですか?
トランザクションについてみんなが言っていることと同じです。
とはいえ...
Rails 2.1時点でのActiveRecordは、オブジェクトの属性値を記録しています。ですから、もしあなたが属性
total
という属性があれば
total_changed?
メソッドと
total_was
メソッドで、古い値を返します。
もうこれを追跡するためにモデルに何かを追加する必要はありません。
更新してください。 以下は ActiveModel::Dirty のドキュメントです。
関連
-
[解決済み】gemのインストールができない - gemネイティブ拡張の構築に失敗 - そのようなファイルをロードできない -- mkmf (LoadError)
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] どなたか、collection_selectをわかりやすく説明していただけませんか?
-
[解決済み] Errno::EACCESS: パーミッションが拒否された @ dir_s_mkdir
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
-
[解決済み】activerecordのレコードを複製する最も簡単な方法は何ですか?
-
[解決済み】Railsアプリのすべてのモデルのコレクションを取得する方法はありますか?
-
[解決済み] rails activerecordで今日作成されたレコードを取得するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜRuby on Railsは、http://localhost:3000 の代わりに http://0.0.0.0:3000 を使用するのですか?
-
[解決済み】PG::ConnectionBad: fe_sendauth: パスワードが供給されない
-
[解決済み] 新規ユーザー作成時に ActiveModel::ForbiddenAttributesError が発生する。
-
[解決済み] DestroyとDeleteの違い
-
[解決済み] nil:NilClass の未定義メソッド `each'... なぜ?
-
[解決済み] railsで':remote => true'はどのように動作するのでしょうか?
-
[解決済み] rails consoleを起動するとRailsのイニシャライザーが呼ばれる?
-
[解決済み] Rspec が私のモデルクラスを認識しない。初期化されていない定数エラー
-
[解決済み] ルビーオンレール モデルから明確な値を選択する
-
[解決済み] rails/rubyでgroup_byを使用する。