web-dev-qa-db-ja.com

Ruby on Railsコールバック、:before_saveと:before_createの違いは何ですか?

Rubyコールバックの:before_saveおよび:before_create Railsが何であり、Railsで何をする必要があるのか​​を詳しく説明してください検証?検証は:before_saveまたは:before_createの後に発生しますか?

174
Agung Prasetyo

Railsでの作成操作では、データベース操作の前に6回、2回後にコールバックがあります。順番に、これらは次のとおりです。

  1. before_validation
  2. before_validation_on_create
  3. after_validation
  4. after_validation_on_create
  5. before_save
  6. before_create

    データベースの挿入
  7. after_create
  8. after_save

更新操作のセットはまったく同じです。ただし、updateではなくcreateをすべての場所で読み取ります(およびINSERTではなくUPDATE)。

これから、before_saveおよびbefore_createコールバックの前に検証が実行されることがわかります。

before_saveは、before_createの少し前にあります。私の知る限り、両者の間では何も起こりません。ただし、before_saveは更新操作でも発生しますが、before_createは作成時にのみ発生します。

352
Chowlett

before_saveは、オブジェクトが保存されるたびに呼び出されます。したがって、新規および既存のオブジェクトに対して。 (作成および更新アクション)

before_createは作成前のみ。したがって、新しいオブジェクトのみ(アクションを作成)

129
Michael Koper

before_create vs before_save :on => :create

コールバックの順序に注意する必要がある場合があります

詳細については、こちらを参照してください: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/

2
23inhouse