Me he bajado este codigo de internet para que me devuelva la edad
segun la fecha de nacimiento
def self.age
years = Date.today.year - read_attribute(:birthdate).year
if Date.today.month < read_attribute(:birthdate).month ||
(Date.today.month == read_attribute(:birthdate).month &&
read_attribute(:birthdate).day >= Date.today.day)
years = years - 1
end
return years
end
Lo he puesto en el modelo pero al ejecutarlo desde la vista me da el
error
undefined method `read_attribute’ for User:Class
Lo curioso es que dentro de ese mismo modelo tengo este otro que si
funciona bien pero con write_attribute
def fill_data_create
write_attribute “password”, self.class.sha1(password)
end
¿A que puede ser debido?
Otra cosa, ¿existe algo en MySQL para calcular directamente la edad
desde un campo con la fecha de nacimiento?
On 9/6/07, Jose Francisco G. [email protected] wrote:
return years
write_attribute "password", self.class.sha1(password)
end
¿A que puede ser debido?
El método no debería ser de clase, si no de instancia, es decir,
deberías eliminar “self.” de la definición. Creo que con eso
funcionaría.
Otra cosa, ¿existe algo en MySQL para calcular directamente la edad
desde un campo con la fecha de nacimiento?
No lo se, pero las bases de datos están para almacenar datos, Ruby
sirve muy bien para calcular esos datos. Cada uno con su tarea.
El 6/09/07, Jose Francisco G. <josefgon@…>
escribió:> Otra cosa, ¿existe algo en MySQL para calcular directamente la edad
desde un campo con la fecha de nacimiento?
Prueba con algo estilo:
SELECT TO_DAYS(NOW()) - TO_DAYS(birthday) FROM users;
Un saludo,
Serabe
Ok, ya ha funcionado, muchas gracias a los dos.
On 9/6/07, Jose Francisco G. [email protected] wrote:
El método no debería ser de clase, si no de instancia, es decir,
deberías eliminar “self.” de la definición. Creo que con eso
funcionaría.
Si le quito self y la llamo desde la vista con <%= User.age %> me da
el error undefined method `age’ for User:Class
Tienes un poco de confusión entre los métodos de clase y de instancia:
los métodos con “self.” delante son de clase y se aplican sobre User
(la clase); los métodos sin “self.” son de instancia y debes
aplicarlos sobre una instancia (es decir, sobre un @user, por
ejemplo). “read_attribute” es un método de instancia, por eso no
puedes aplicarlo sobre una clase.
No lo se, pero las bases de datos están para almacenar datos, Ruby
sirve muy bien para calcular esos datos. Cada uno con su tarea.
La cuestion de MySQL es para filtrar los usuarios segun un rango de
edades partiendo de la fecha de nacimiento. Supongo que sera mejor que
ya lo filtre la base de datos.
En ese caso el filtrado en la base de datos es la única
solucióninteresante (si no quieres desnormalizar). Serabe te ha dado la
solución en otra respuesta.