Buenas lista,
Andaba mirando el código de algunos plugins, en concreto los
referidos a la autorización, el caso es que la mayoría usan lo
siguiente a la hora de asignar un password
def password=(value)
…
end
Entiendo que si hay un metodo attr_accesor :password se definen dos
metodos uno password para ver y uno password= para modificar,
entonces, el método def password=(value) … lo que hace es
sobreescribir el método definido automáticamente por attr_accesor
¿no? ¿y por que el mencionado método es llamado automáticamente al
asignar una
contraseña?
Espero haberme explicado bien.
Muchas gracias
Saludos
2008/6/14 alarkspur [email protected]:
metodos uno password para ver y uno password= para modificar,
entonces, el método def password=(value) … lo que hace es
sobreescribir el método definido automáticamente por attr_accesor
¿no? ¿y por que el mencionado método es llamado automáticamente al
asignar una contraseña?
Porque en Ruby no es un error redefinir un metodo. Si se hace, la
ultima definicion ejecutada es la que gana:
class C
def x
"foo"
end
def x
"bar"
end
end
C.new.x # => "bar"
En cuanto a esto, que password= sea un setter no es relevante.
En cuanto a esto, que password= sea un setter no es relevante.
Gracias, entendido, pero… por ejemplo:
model
class User < ActiveRecord::Base
attr_accessor :password
def password=(value)
@password = value
end
end
controlador
class Loquesea < ApplicationController
def create
User.new(params[:user)
…
end
end
No entiendo es que es lo que hace rails o ruby para que el método
password= se ejecute siempre al grabar un usuario, no entiendo quien
es el encargado de llamarlo.
O preguntado de otro modo, ¿por que se ejecuta el método password= si
no es llamado desde ningún lado?
Creo que tengo una liada muy grande.
Muchas gracias.
Muchas gracias, entre la explicación y algunos ejemplos que estoy
haciendo ya esta un poco más claro.
Saludos.
El 14/06/2008, a las 18:02, Ricardo M.
escribió:
controlador
es el encargado de llamarlo.
De modo simplificado, lo que haces es para cada par key => value
dentro de params[:user], llamar al metodo “#{key}=” y pasarle el
“value”. Esto está implementado en ActiveRecord::Base
O preguntado de otro modo, ¿por que se ejecuta el método password= si
no es llamado desde ningún lado?
La llamada está, solo que no la ves. Y más probable aún (habría que
mirar el código) hace una llamada al método send pasando como
parámetro el “#{key}=” como nombre de método a llamar.
–
¡Falta Uno! - http://www.falta-uno.com.ar/
Ricardo M.
2008/6/14 alarkspur [email protected]:
Muchas gracias, entre la explicación y algunos ejemplos que estoy
haciendo ya esta un poco más claro.
Al redefinir un setter que sea columna en base de datos (no es el caso
de password=), hay que tener presente que AR lo va a llamar tambien
cuando cargue un registro, por lo que no pueden pensarse unicamente de
la vista hacia abajo, funcionan en los dos sentidos.
Muy interesante, lo voy a probar ahora mismo.
Muchas gracias.
Saludos.
El 14/06/2008, a las 20:34, Xavier N.
escribió:
2008/6/14 alarkspur [email protected]: