web-dev-qa-db-fra.com

Rails: Pourquoi find (id) lève-t-il une exception dans les rails?

Duplicata possible:
Model.find (1) donne une erreur ActiveRecord lorsque l'ID 1 n'existe pas

S'il n'y a aucun utilisateur avec un id de 1 dans la base de données, essayer User.find(1) déclenchera une exception.

Pourquoi est-ce?

112
Kirschstein

Parce que c'est la façon dont les architectes avaient l'intention de trouver (id) pour travailler, comme indiqué dans le RDoc:

Rechercher par identifiant - Il peut s'agir d'un identifiant spécifique (1), d'une liste d'identifiants (1, 5, 6) ou d'un tableau d'identifiants ([5, 6, 10]). Si aucun enregistrement ne peut être trouvé pour tous les identifiants répertoriés, alors RecordNotFound sera levé.

Si vous ne voulez pas que l'exception soit déclenchée, utilisez find_by_id, qui retournera nil s'il ne peut pas trouver un objet avec l'ID spécifié. Votre exemple serait alors User.find_by_id(1).

202
runako