ステータスカラムを持つ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. 関連付けられたレコードに基づく検証
- 3. モデルに関連付けられたRailsメーラー
- 4. has_manyとbelongs_toのRailsモデルの関連付けを作成する
- 5. Rails 3:モデル関係を作成するために使用する関連付け
- 6. 関連付けられているモデルが作成されていません
- 7. モデルを親に関連付けるための基本的なレールパターン
- 8. 別のコントローラに関連付けられたモデルを表示
- 9. Ember.jsとRailsモデルの関連付け
- 10. 関連付けられたテーブルのrow_countに基づいて結果を返すクエリ?
- 11. Rails HABTMとbelongs_toはユーザ/プロジェクトを関連付けるために
- 12. Railsは関連モデルの属性に基づいてエントリをソートします
- 13. メモリリークに関連付けられたUIView
- 14. POST操作で関連付けられたモデルの属性を使用
- 15. TDataSetに関連付けられた永続フィールドコンポーネントを作成するためのコード
- 16. アップロードされた画像をモデルに関連付ける方法
- 17. その関連付けに基づいてレールモデルを初期化する方法
- 18. 関連付けられたオブジェクトでラジオボタンのように動作するブール値フィールドを作成したい
- 19. Rails:関連するデータベースレコードのグループに基づいてテーブルを生成
- 20. Railsモデルの関連付けを翻訳する - 動作しない
- 21. 関連付けられているモデルのプロパティでレコードを見つける
- 22. 生成されたファイルをDjangoモデルに関連付ける方法
- 23. 2つのモデルをRailsに関連付ける(ユーザとプロフィール)
- 24. searchlogicを使用して関連付けられたモデルの属性をソート
- 25. MongoDBとのCakePHPモデルの関連付けを正しく作成しました
- 26. cakephp:関連付けられていない別のモデルにアクセスする方法
- 27. テーブルに関連付けられていないHibernateエンティティを作成します。
- 28. Enum関連付けられた値
- 29. 単一テーブル継承に関連付けられたHABTM関連
- 30. Rails 3.1でモデルの関連付けを定義するMixin
のRailsで首を振ります。 – Georges
なぜデータベース・トリガーがログ・ファイルに書き込むのですか?この場合、トリガの唯一の目的は、トリガが書き込まれたテーブルの履歴アクティビティログとして機能します。ファイルへのロギングはアプリケーションの責任です。私は基本的なシステム理解の根本的な欠如があると考え始めています。しかし、私たちはRailsについて話しています。だから、私は、 "なぜなら"精神を知らずにすべてを行うことを説明していると思います。犯行はない、ジョルジュ。しかし、Railsは常識的なプログラミングの逸話であることが最善です。 – Skittles
ああ、申し訳ありません。私は元のコメントが歴史*ファイル*を述べたので、私はもともとあなたのコメントを誤解したと思います。 あなたはそうです。この例では、監査テーブルとトリガーがはるかに優れています。 Upvoted。 – Georges