before_create is after_validatation :on => :create , when it should be before_validation :on => :create

782 views
Skip to first unread message

Jarred Sumner

unread,
May 26, 2012, 7:04:56 PM5/26/12
to Ruby on Rails: Core
In ActiveRecord's callbacks, methods within a before_create callback
are called after the validation, but before the model is created.

This was an intentional design decision, but I think it was the wrong
one. What do you think?

When I think of before_create, I think of before_validation :foo, :on
=> :create, but, by default, before_create is synonymous with
after_validation :foo, :on => :create`, which is technically correct,
but confusing. Most of the goal of convention over configuration is to
have sane defaults, right? Wouldn't following that principle include
favoring what makes the most sense at first thought, over a
technicality?

And, I'm calling this a technicality as someone who didn't immediately
realize that before_create is invoked after validations. It makes
logical sense, but this is an issue that, most likely, many
inexperienced developers will/do encounter.

Rodrigo Rosenfeld Rosas

unread,
May 26, 2012, 8:33:53 PM5/26/12
to rubyonra...@googlegroups.com
It makes sense to me. I expect before_create to run after validation, as
should be only called if the object is about to be created. That means
it has already passed validation.

Having said that, I usually only use before_validation hooks and I can't
remember the last time I used before_creation, if I ever used...

Pedro Nascimento

unread,
May 26, 2012, 11:38:15 PM5/26/12
to rubyonra...@googlegroups.com
I use before_create often and I do find it reasonable to be after_validation. If you're ever in doubt, Rails Guides explains the callback order before anything else: http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group.
To post to this group, send email to rubyonrails-core@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-core+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-core?hl=en.


Reply all
Reply to author
Forward
0 new messages