Rails3中的DEPRECATION WARNING for before_create,before_update,before_save,before_destroy

我刚刚将我的应用程序从Rails 2.3升级到3,我为before_create,update,save,destroy等获得了一些DEPRECATION 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) 

只是一个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 

你看到的警告是Rails 3试图阻止你覆盖before_*after_*方法。 这与您在控制器中使用before_filter和其他回调的方式类似。

这意味着不是做:

 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希望你这样做:

 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 

在这种情况下,您甚至可能将两者分开,因为您可能希望独立生成密码:

 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