raise ActiveRecord :: RecordNotFound (ou n'importe quel statut 404) pour une date invalide

Dans mon controller contrôleur, j'ai utiliser Date.new pour créer un objet date, pour être passé dans mon ActiveRecord.

end_range = Date.new(params[:year].to_i, params[:month].to_i, params[:day].to_i).end_of_day.to_formatted_s(:db)

Le problème, c'est que si un utilisateur a essayé de changer les paramètres dans l'URL à la main, telles que la saisie de 40 pour la journée param, le Date.new échoue (comme prévu). Cependant, je préfère ne pas avoir une erreur 500 si un utilisateur a tapé dans quelque chose comme ça, mais plutôt une erreur 404 (parce que vous ne jamais être en mesure d'un enregistrement avec un jour de 40).

J'ai essayé plusieurs conditionnelles (if et unless consolidés) pour raise ActiveRecord::RecordNotFound si cela échoue, mais elle renvoie l'erreur 500 avant l'exécution du conditionnel (et donc à ne jamais revenir sur une page 404).

Quelqu'un sait une meilleure façon de gérer cela, ou une façon de permettre à la Date.new à l'échec avec plus de grâce, de sorte que l'instruction conditionnelle peut courir?

source d'informationauteur James Pierce