私はafter_save
のメソッドを持っていますが(オブジェクトのIDを使用する理由でafter_saveを行う必要があります)、フォームにチェックボックス属性を追加しました。値は、コールバックが保存されるために自然に渡されます。しかし、そのチェックボックスだけが変更された状況では、私はそのメソッドを呼びたくはありません...すべての検証/コールバックを渡したいと思います。 object.changes?
にチェックボックス属性しかない場合はチェックできますが、メソッドがafter_saveになったら、その情報はもうありません。 check_method before_saveを実行できますか?保存時にコールバックをスキップするものがあります(どのようになりますか)。それとも別の提案がありますか?ありがとう!Rails - 条件付きスキップコールバック(after_save)
答えて
アトリビュートが変更されたか、変更されるかは、アトリビュートの名前に_changed
を追加することでわかります。 after_save
とafter_commit
コールバックで
オプション1
after_save :some_method
def some_method
if email_changed?
// do some stuff
end
end
オプション2
after_save :some_method, if: :email_changed?
def some_method
// do some stuff
end
after_save on attribute_changed?常にfalseを返します。 before_saveコールバックでのみ機能します –
私はRails 5で自分のコードをテストしています。 –
私はRails 3.2.17を使用しています。 after_saveコールバックでは、変更は常に空になります...私のためにbefore_saveでのみ動作します –
、あなただけの属性あれば変更属性と短絡をチェックするためにprevious_changes
を使用することができますチェックボックス属性がリストされています。
はそれを試しましたが、look:before_save、object.changesは{"desabilita_integracao_sap" => [false、true]}、after_save、object.previous_changesは{ } (空の)。私はレールを使用しています3.それは動作しますか? –
私はこれが当時存在していたことは知っていますが、Rails 3で試したことはありません。後で試して報告します。どのようなバージョンのRails 3を使っていますか? –
it's Rails 3.2.17。私はそれがそのメソッドを持って、原因がいくつかのエラーを提起しなかったと信じて、ちょうど空のハッシュを返しました... –
- 1. Railsバリデーション条件付きリダイレクト
- 2. Railsの条件付きルート
- 3. Railsの条件付きバリデーション
- 4. Rails state_machine - 条件付き検証?
- 5. Railsモデルの条件付きコールバック?
- 6. Rails:条件付きfind_by_contents; syntax help please
- 7. Rails条件付き選択内容
- 8. Rails eager_load関連の条件付き
- 9. RAILS 3.1のCSSの条件付きライブコンパイル
- 10. 数が条件付きのRailsクエリ
- 11. Rails - htmlブロックの条件付き表示
- 12. 条件付きHas_many
- 13. 条件付き
- 14. JQueryフォームバリデーター付きのフォームフィールドの条件付きバリデーションRails Gem
- 15. ケース、条件付き条件を選択
- 16. MVC検索条件付きの条件
- 17. 条件文のページに応じて、部分的にはRailsで条件付き?
- 18. 条件付きプロミスチェーニング?
- 19. 条件付きリファレンス
- 20. SP_WHO2条件付き?
- 21. 条件付きデータテンプレート
- 22. は条件付き
- 23. 条件付きルーティング?
- 24. 条件付きカウント
- 25. 条件付きオープンリンク
- 26. 条件付きテンプレートループテンプレート
- 27. 条件付きバインディング?
- 28. 条件付きランダムフィールド
- 29. 条件付きマッポトラブ
- 30. 条件付きカラー
だから、いくつかの理由でスキップコールバックと検証をしたい場合、railsにはいくつかの方法があります。これらのメソッドはSQLでテーブルを直接更新し、コールバックや検証は一切行いません。 [list](http://guides.rubyonrails.org/active_record_callbacks.html#skipping-callbacks)を見てください。 –
@ArupRakshitしかし問題はそれが私のフォーム上にあり、saveメソッドを呼び出さなければならないということです。しかし、その属性だけが変更された場合は、before_saveをチェックして別のコールバックをスキップしたいとします。 –
「person.name_changed?」のように使用できます。ここで 'name'は' person'モデルの属性です。 –