回答:
Railsでのcreateオペレーションでは、データベースオペレーションの前に6つのコールバックがあり、2つ後にコールバックがあります。順に、次のとおりです。
before_validationbefore_validation_on_createafter_validationafter_validation_on_createbefore_savebefore_create
after_createafter_save更新操作のセットはまったく同じですが、すべてupdateのcreate場所ではなく読み取られます(およびINSERTではなくUPDATE)。
これから、before_saveおよびbefore_createコールバックの前に検証が実行されていることがわかります。
before_save少し前に起こりますbefore_create。私の知る限り、それらの間では何も起こりません。ただしbefore_save、Updateオペレーションでも発生しますが、before_createCreatesでのみ発生します。
after_saveまたはを使用したときに作成されたばかりのレコードをどのように参照しますかafter_create?
after_saveまたはafter_createコールバックでselfは、保存後に存在するため、保存されたばかりのレコードです。それはのような自動生成のフィールドが含まれid、created_at、updated_at。
before_create、create呼び出される実際のメソッドではなく、データベースに保存される新しいオブジェクトを指すことを忘れないでください。したがって、メソッドbefore_createからでもまだ発生できsaveます。
before_save3番目とbefore_create5番目がリストされています。
before_create 対 before_save :on => :create
コールバックの順序に注意する必要がある場合があります
詳細はこちらをご覧ください:
http //pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/
before_save :on => :create動作しません(少なくともレール3.2では)
before_save :generate_api_key, :if => :new_record?
before_validation_on_createおよびafter_validation_on_createはRails 3から削除されました。代わりにbefore_validationおよびafter_validationオプションを使用してください:on => :create。