ステータスカラムを持つActiveRecordモデルがあります。モデルがステータスの変更と共に保存されるとき、ステータスの変更とその変更の責任者を履歴ファイルに書き込む必要があります。私はafter_saveコールバックがうまくいくと思っていましたが、status_changedを使用することはできません。動的メソッドを使用して、履歴の書き込みが実行する必要があることを確認します。モデルが保存されているがステータスが変更されていない場合は、履歴に書きたいとは思わない。私は今、それを処理するための唯一の考えは、after_saveを実行する必要があるかどうかを判断するためにインスタンス変数フラグを使用することです。何か案は?column_changedに基づいて関連付けられたモデルを作成するためのRails after_saveコールバック?
6
A
答えて
0
私は2つのソリューションを参照してください。あなたが言ったように
を:変数フラグを追加し、それが設定されたときにコールバックを実行します。
レコードの更新後にsave_historyを実行します。
例:
old_status = @record.status
if @record.update\_attributes(params[:record])
save_history_here if old_status != @record.status
flash[:notice] = "Successful!"
...
else
...
end
6
代わりbefore_save
コールバックを使用してください。次に、新しいステータス値と古いステータス値の両方にアクセスできます。コールバックはトランザクション内にラップされるため、保存に失敗するか、別のコールバックによってキャンセルされると、履歴書込みもロールバックされます。質問が投稿されましたので、これは変更されているかもしれませんが、after_saveコールバックが利用可能*_changed?
動的なメソッドを持って、正しく設定する必要があります
10
:
class Order
after_save :handle_status_changed, :if => :status_changed?
end
または
class Order
after_save :handle_status_changed
def handle_status_changed
return unless status_changed?
...
end
end
私のために正しく作品
/W Rails 2.3.2。
-6
データベーストリガーについて聞いたことがない人はいますか? データベース・サーバーにon_updateデータベース・トリガーを書き込むと、レコードが更新されるたびに、関連する監査表に以前のレコードの値の履歴コピーが作成されます。
これは私がRailsについて軽視している主なものの1つです。開発者のためにすべてのことをやろうとすると、開発者を騙して、あまりにも多くの時間を費やして開発者を欺くことになります。
あなたはどのように履歴ログファイルにデータベース・トリガー書き込みをするために私を見ることができる場合、私はあなたをupvoteよもう一度
関連する問題
- 1. 関連付けられたhas_manyモデルのフォームの作成
- 2. モデルに関連付けられたRailsメーラー
- 3. has_manyとbelongs_toのRailsモデルの関連付けを作成する
- 4. 関連付けられたレコードに基づく検証
- 5. Rails:モデルの関連付け
- 6. Railsモデルの関連付け
- 7. Rails 3:モデル関係を作成するために使用する関連付け
- 8. Rails - ネストされたモデルを関連付ける方法
- 9. 関連付けられているモデルが作成されていません
- 10. Rails関連するメソッドにアクセスするための4連鎖モデルの関連付け
- 11. Rails has_many:親の "show"ビューでの関連付けと関連モデルの作成
- 12. モデルを親に関連付けるための基本的なレールパターン
- 13. Rails 4、has_many関連 - 関連付けられたオブジェクトを見つける
- 14. 条件に基づくRails関連付けクエリ
- 15. 別のコントローラに関連付けられたモデルを表示
- 16. Ember.jsとRailsモデルの関連付け
- 17. 関連付けられたオブジェクトを作成しますか?
- 18. 関連付けられたモデルによるExtJS 6グリッドグループ
- 19. 選択したスピナー項目に基づいて関連付けられたJson値を得る方法
- 20. Rails - 別のモデルに基づいてモデルのインスタンスを作成する
- 21. 同じモデル内にhas_oneの関連付けを作成する
- 22. Rails HABTMとbelongs_toはユーザ/プロジェクトを関連付けるために
- 23. ネストされたフォームのチェックボックスにラベルを付けて、関連付けられたモデルに書き込む
- 24. 本来、アイテムに関連付けられたタグに基づいてアイテムを元に戻すSolrクエリ
- 25. Postgres - 連続した値に基づいてランク付け
- 26. Railsは関連モデルの属性に基づいてエントリをソートします
- 27. Rails - 関連付けられたレコードのデータを取得
- 28. 関連付けられたタイプを使用してタプルを作成する
- 29. 関連付けられたテーブルのrow_countに基づいて結果を返すクエリ?
- 30. ruby on rails seed .ymlファイルに関連付けられたモデルを持っています
のRailsで首を振ります。 – Georges
なぜデータベース・トリガーがログ・ファイルに書き込むのですか?この場合、トリガの唯一の目的は、トリガが書き込まれたテーブルの履歴アクティビティログとして機能します。ファイルへのロギングはアプリケーションの責任です。私は基本的なシステム理解の根本的な欠如があると考え始めています。しかし、私たちはRailsについて話しています。だから、私は、 "なぜなら"精神を知らずにすべてを行うことを説明していると思います。犯行はない、ジョルジュ。しかし、Railsは常識的なプログラミングの逸話であることが最善です。 – Skittles
ああ、申し訳ありません。私は元のコメントが歴史*ファイル*を述べたので、私はもともとあなたのコメントを誤解したと思います。 あなたはそうです。この例では、監査テーブルとトリガーがはるかに優れています。 Upvoted。 – Georges