2010-09-22 6 views
26

ich meine Bewerbung nur ein Upgrade von Rails 2,3-3 und ich habe einige deprecation WARNHINWEISE für meine before_create, Update bekommen, speichern, zerstören usw.deprecation WARNUNG in Rails3 für before_create, BEFORE_UPDATE, BEFORE_SAVE, before_destroy

Does Wer weiß, wie man das Problem behebt?

Das sind meine Warnungen:

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) 

Nur ein Beispiel für die 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 

Antwort

63

Die Warnung Sie sehen sind, ist Sie die Rails 3 Versuch zu entmutigen von der Basis überschreiben before_* und after_* Methoden. Dies ist ähnlich wie Sie before_filter und andere Rückrufe in Ihrem Controller haben.

Das bedeutet, dass anstatt das zu tun:

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 möchte, dass Sie tun:

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 diesem Fall könnten Sie sogar die beiden sich trennen, da es eine sein könnte Möglichkeit, dass Sie ein Passwort unabhängig voneinander generieren möchten:

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

großartige Erklärung. vielen Dank! – tbaums

+1

+1 für den hinzugefügten Refactor – corroded

Verwandte Themen