ActiveRecord::RecordInvalid と ActiveRecord::RecordNotSaved
- ActiveRecord::RecordInvalid を手動で raise するには引数として model オブジェクトが必要。
- 下記のように、validationに失敗したオブジェクトを取得できる
begin complex_operation_that_calls_save!_internally rescue ActiveRecord::RecordInvalid => invalid puts invalid.record.errors end
- ActiveRecord::RecordNotSaved は ActiveRecord::RecordInvalid との違いがいまいち分からない。
- ActiveRecord::RecordNotSaved の方は model オブジェクトが必要ない
- A Programmer's Journal: ActiveRecord::RecordInvalid vs ActiveRecord::RecordNotSaved によると、before_ 系のコールバックでfalseを返したときは RecordNotSaved になるみたい。なので、コールバック使う場合は RecordInvalid と RecordNotSaved の両方を rescue で指定してやる必要がある