Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DEPRECATION WARNING in Rails3 for before_create, before_update, before_save, before_destroy

I just upgraded my application from Rails 2.3 to 3 and I'm getting some DEPRECATION WARNINGS for my before_create ,update, save, destroy etc.

Does anyone know how ot fix the issue?

These are my Warnings :

DEPRECATION WARNING: Base#before_create has been deprecated, please use Base.before_create :method instead. (called from /Users/macmini/qna/app/models/user.rb:32) DEPRECATION WARNING: Base#before_update has been deprecated, please use Base.before_update :method instead. (called from /Users/macmini/qna/app/models/user.rb:40) DEPRECATION WARNING: Base#after_save has been deprecated, please use Base.after_save :method instead. (called from /Users/macmini/qna/app/models/user.rb:50) DEPRECATION WARNING: Base#before_destroy has been deprecated, please use Base.before_destroy :method instead. (called from /Users/macmini/qna/app/models/user.rb:56) 

Just one example for the before_create :

  def before_create     self.username.downcase!     self.salt = User.make_salt(self.username)     self.hashed_password = User.hash_with_salt(@password, self.salt)   end 
like image 862
Sharethefun Avatar asked Sep 22 '10 03:09

Sharethefun


1 Answers

The warning you're seeing is Rails 3's attempt to discourage you from overwriting the base before_* and after_* methods. This is similar to how you would have before_filter and other callbacks in your controller.

What this means is that instead of doing:

def before_create   self.username.downcase!   self.salt = User.make_salt(self.username)   self.hashed_password = User.hash_with_salt(@password, self.salt) end 

Rails wants you to do:

before_create :downcase_username_and_create_password  def downcase_username_and_create_password   self.username.downcase!   self.salt = User.make_salt(self.username)   self.hashed_password = User.hash_with_salt(@password, self.salt) end 

In this case, you might even split up the two, as there could be a possibility that you'd want to generate a password independently:

before_create :downcase_username, :create_password  def downcase_username   self.username.downcase! end  def create_password   self.salt = User.make_salt(self.username)   self.hashed_password = User.hash_with_salt(@password, self.salt) end 
like image 109
vonconrad Avatar answered Sep 20 '22 12:09

vonconrad