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

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.

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...

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