es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for 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 el ArgumentError, el método birthday 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:

    def birthday(date=nil)
      return "" unless date
      "MinYear#{date.year - 1911} Mes#{date.month} Día#{date.day}"
    end
    

    El método anterior verifica si date es nulo y devuelve una cadena vacía en caso de ser cierto. Si date 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:

    <%= user.decorate.birthday(user.fecha_de_nacimiento) %>
    

    Reemplaza user.fecha_de_nacimiento con el atributo real de fecha de nacimiento del modelo User.

    Con estos cambios, el método birthday debería funcionar sin errores.

Comments are closed.