En mi controlador de controlador, tengo el uso Date.new
para crear un objeto de fecha que se pasará en mi ActiveRecord.raise ActiveRecord :: RecordNotFound (o cualquier estado 404) para la fecha no válida
end_range = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i).end_of_day.to_formatted_s(:db)
El problema con esto es que por encima de si un usuario ha intentado cambiar los parámetros de la URL de forma manual, como cuando se entra 40
parámetro para el día, el Date.new
falla (como se esperaba). Sin embargo, prefiero no tener un error de 500 si un usuario escribió algo así, sino un error 404 (porque nunca podrá grabar un día con 40
).
He intentado varias condicionales (if
y unless
declaraciones) a raise ActiveRecord::RecordNotFound
si eso falla, pero devuelve el error 500 antes de ejecutar el condicional (y por lo tanto no devolver un 404).
¿Alguien sabe una mejor manera de manejar eso, o una forma de permitir que el Date.new
falle con mayor gracia para que pueda ejecutarse la instrucción condicional?
Gracias, que funcionó. El segundo ejemplo funciona muy bien, eso es lo que estaba buscando, pero comencé a intentar a través de un NotFound de ActiveRecord solo para obtener algo distinto de 500. (Si alguien lee, esto, ActiveRecord está mal escrito en el primer ejemplo.) –
Fixed el error tipográfico Me alegro de que funcionó para ti. – tadman