Ruby on Rails Callback, what is difference between :before_save and :before_create?
ruby, ruby-on-rails, ruby-on-rails-3, validation
Solution
In a create operation under Rails, there are six callbacks before the database operation, and two after. In order, these are:
- `before_validation`
- `before_validation_on_create`
- `after_validation`
- `after_validation_on_create`
- `before_save`
- `before_create` DATABASE INSERT
- `after_create`
- `after_save`
Update operations have exactly the same set, except read `update` instead of `create` everywhere (and UPDATE instead of INSERT).
From this, you can see that validation is carried out before the `before_save` and `before_create` callbacks.
The `before_save` occurs slightly before the `before_create`. To the best of my knowledge, nothing happens between them; but `before_save` will also fire on Update operations, while `before_create` will only fire on Creates.
Problem
Could you explain in detail what the `:before_save` and `:before_create` Ruby on Rails callbacks are, and what they have to do with Rails validations? Does validation occur after `:before_save` or `:before_create`?