2010-09-22 12 views
26

Acabo de actualizar mi solicitud de Rails 2.3 a 3 y estoy recibiendo algunos ADVERTENCIAS desaprobación por mi before_create, actualizar, guardar, etc. destruirDeprecation ADVERTENCIA en Rails3 para before_create, before_update, before_save, before_destroy

¿El Alguien sabe cómo solucionar el problema?

Estos son mis advertencias:

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) 

sólo un ejemplo para el 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 

Respuesta

63

La advertencia que se está viendo es el intento de Rails 3 para disuadirlo de sobrescribir la base before_* y after_* métodos. Esto es similar a cómo tendría before_filter y otras devoluciones de llamada en su controlador.

Lo que esto significa es que en vez de hacer:

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

rieles quiere que hagas:

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 

En este caso, puede ser que incluso se separaron los dos, ya que podría haber una posibilidad de que desee generar una contraseña de manera independiente:

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

gran explicación. ¡muchas gracias! – tbaums

+1

+1 para el refactor agregado – corroded

Cuestiones relacionadas