2010-09-22 6 views
26

Je viens de mettre ma demande de Rails et de 2,3 à 3 je reçois quelques AVERTISSEMENTS pour mon deprecation before_create, mise à jour, sauvegarder, détruire, etc.deprecation AVERTISSEMENT dans Rails3 pour before_create, before_update, before_save, before_destroy

Est-ce Quelqu'un sait-il comment résoudre le problème?

Ce sont mes avertissements:

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) 

Juste un exemple pour la 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 

Répondre

63

L'avertissement que vous voyez est la tentative de Rails 3 pour vous décourager d'écraser la base before_* et after_* méthodes Ceci est similaire à la façon dont vous auriez before_filter et d'autres rappels dans votre contrôleur.

Ce que cela signifie est que, au lieu de faire:

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 veut vous faire:

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 

Dans ce cas, vous pourriez même diviser les deux, comme il pourrait y avoir un possibilité que vous vouliez générer un mot de passe indépendamment:

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 
+0

bonne explication. Merci beaucoup! – tbaums

+1

+1 pour le refactor ajouté – corroded

Questions connexes