回答:
Railsでのcreateオペレーションでは、データベースオペレーションの前に6つのコールバックがあり、2つ後にコールバックがあります。順に、次のとおりです。
before_validation
before_validation_on_create
after_validation
after_validation_on_create
before_save
before_create
after_create
after_save
更新操作のセットはまったく同じですが、すべてupdate
のcreate
場所ではなく読み取られます(およびINSERTではなくUPDATE)。
これから、before_save
およびbefore_create
コールバックの前に検証が実行されていることがわかります。
before_save
少し前に起こりますbefore_create
。私の知る限り、それらの間では何も起こりません。ただしbefore_save
、Updateオペレーションでも発生しますが、before_create
Createsでのみ発生します。
after_save
またはを使用したときに作成されたばかりのレコードをどのように参照しますかafter_create
?
after_save
またはafter_create
コールバックでself
は、保存後に存在するため、保存されたばかりのレコードです。それはのような自動生成のフィールドが含まれid
、created_at
、updated_at
。
before_create
、create
呼び出される実際のメソッドではなく、データベースに保存される新しいオブジェクトを指すことを忘れないでください。したがって、メソッドbefore_create
からでもまだ発生できsave
ます。
before_save
3番目とbefore_create
5番目がリストされています。
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
。