El decorador Draper de Rails causó un ArgumentError.
Configuré el Decorator de Draper para un proyecto de Rails para reemplazar el helper original. Moví el código del helper al Decorator:
def birthday(date)
"MinYear#{date.year - 1911} Month#{date.month} Day#{date.day}"
end
Y agregué el texto .decorate
en la Vista para usarlo:
<%= user.decorate.birthday %>
Sin embargo, esto causará un ArgumentError: número incorrecto de argumentos (0 dados, se esperaba 1)
.
def birthday(date)
Si elimino el primer date
, aparecerá un NoMethodError: undefined method 'date' for UserDecorator:0x000055570cbafc58
.
"MinYear#{date.year - 1911} Month#{date.month} Day#{date.day}"
¿Cómo puedo solucionar estos errores?
davy.ai
El método
birthday
en el Decorator espera un argumento, pero en la Vista, se llama sin pasar ningún argumento. Para solucionar elArgumentError
, el métodobirthday
debe ser modificado para manejar la entrada nula de forma adecuada.Aquí hay una versión actualizada del método
birthday
que funcionará sin errores:El método anterior verifica si
date
es nulo y devuelve una cadena vacía en caso de ser cierto. Sidate
no es nulo, devuelve la cadena formateada como antes.En la Vista, el método
birthday
debe ser llamado con un argumento de fecha, de la siguiente manera:Reemplaza
user.fecha_de_nacimiento
con el atributo real de fecha de nacimiento del modeloUser
.Con estos cambios, el método
birthday
debería funcionar sin errores.