This project is archived and is in readonly mode.
Please un-deprecate before_save, after_save, etc methods
Reported by Nate Wiger | June 11th, 2010 @ 08:41 PM
We have been working to move from 2.3.3 to 3.0.0.beta4 recently and have run into this decision:
Base#before_save has been deprecated, please use Base.before_save :method instead. (called from <class:User> at app/models/user.rb
I assume this decision was designed to protect people from themselves; that is, where they use inheritance or mixins that result in multiple "def before_save" definitions, which results in them not getting the callbacks that they expect. So the Rails team is recommending that the other ways of registering callbacks are preferred.
IF so, this is just that - a recommendation - and should remain as such. It's a great thing to document and point out to people as a caveat. It's also a great thing for plugin others to abide by. However, the "def before_save" idiom has been in Rails for years, and is immensely powerful. Consider:
class Auto < ActiveRecord::Base
def before_save
# ...
end
end
class Car < Auto
def before_save
super
# ...
end
end
The great thing about this approach is the developer is using features of the Ruby language. A while ago Yehuda posted a long blog post about how we need to go back to our Ruby roots, and this approach supports that.
Furthermore, you can get into just as much trouble with the symbol approach:
class Auto < ActiveRecord::Base
before_save :set_defaults
def set_defaults
# ...
end
end
class Car < Auto
before_save :set_defaults
def set_defaults
# ...
end
end
With this setup, the developer could mistakenly think both were going to get called; using the symbol method name approach obscures what is going on under the hood. You would still need to put "super" in set_defaults, which requires a good amount of explanation.
Please reverse this decision and allow us Rails users to keep the "def callback" approach which has proven to be so powerful in Rails over the past years.
Thanks,
Nate Wiger
PlayStation
Comments and changes to this ticket
-
Rohit Arondekar October 7th, 2010 @ 07:19 AM
- State changed from new to invalid
- Importance changed from to Low
I don't think
before_save
/after_save
have been deprecated. I don't get any deprecation warnings. -
Michael Hasenstein February 18th, 2011 @ 10:08 AM
I do - Rails 3.0.4. I don't know if it's VALID, but I DO see the message. I changed the names of my before/after_save functions to something else, in my case naming was accidental and I don't care.
Create your profile
Help contribute to this project by taking a few moments to create your personal profile. Create your profile »
<h2 style="font-size: 14px">Tickets have moved to Github</h2>
The new ticket tracker is available at <a href="https://github.com/rails/rails/issues">https://github.com/rails/rails/issues</a>