Ruby on Rails Callback, what is difference between :before_save and :before_create?

Ruby on-RailsRubyRuby on-Rails-3Validation

Ruby on-Rails Problem Overview


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?

Ruby on-Rails Solutions


Solution 1 - Ruby on-Rails

In a create operation under Rails, there are six callbacks before the database operation, and two after. In order, these are:

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

    DATABASE INSERT
  7. after_create
  8. 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.

Solution 2 - Ruby on-Rails

before_save is called every time an object is saved. So for new and existing objects. (create and update action)

before_create only before creation. So only for new objects (create action)

Solution 3 - Ruby on-Rails

before_create vs before_save :on => :create

Sometimes you have to be careful of the order of the callbacks

See here for more details: http://pivotallabs.com/activerecord-callbacks-autosave-before-this-and-that-etc/

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAgung PrasetyoView Question on Stackoverflow
Solution 1 - Ruby on-RailsChowlettView Answer on Stackoverflow
Solution 2 - Ruby on-RailsMichael KoperView Answer on Stackoverflow
Solution 3 - Ruby on-Rails23inhouseView Answer on Stackoverflow