Quelle est la différence entre les trouver de, où et find_by_id?
Quelle est la différence entre find
, where
et find_by_id
? Ils travaillent tous lorsque vous essayez de trouver un utilisateur donné un ID.
Vous devez vous connecter pour publier un commentaire.
La différence est qu'ils retournent lorsqu'un enregistrement est trouvé, ou quand il ne l'est pas. Considérons les exemples suivants:
Comme vous pouvez le voir, un utilisateur existant peuvent être récupérés en utilisant l'une des 3 méthodes. La grande différence avec l'aide de
where
est que vous pouvez la chaîne de commandes (bien sûr, sans faire appelfirst
premier.)Jetons un coup d'oeil à lorsque vous essayez de trouver un enregistrement qui n'existe pas
Donc, ici, il est évident que lorsque vous utilisez
find
recherche d'un enregistrement qui n'existe pas, vous obtenez une exception. Cette exception estActiveRecord::RecordNotFound
qui rend une 404 sur l'environnement de production.Espérons que cette aide!
Mise à JOUR
Rails 4 utilise la syntaxe suivante pour
find_by
find_by_*
méthodes sont deprecrated dans les rails 4 en faveur defind_by(*: ...)
donc, ici, ce serait être :find_by(id: ...)
trouver => Ce retour seul enregistrement si le primary_key(id) existe dans le système en donnera une erreur.
find_by => Ce sera de retour seul enregistrement dépend de l'attribut donné, et si la valeur de l'attribut n'est pas exister dans la base de données, il sera de retour nul.
ici le nom de l'attribut et il doit exister dans votre Modal.
où => Ce sera le retour de l'active record relation avec zéro, un ou plusieurs enregistrements, vous devez utiliser le premier pour retourner un seul enregistrement ou nul dans le cas zéro des enregistrements de retour.
ActiveRecord::RecordNotFound: Couldn't find Record with 'id'=0
Enregistrement.find_by(id: 0) renvoienil
Enregistrement.find_by_id(0) renvoie aussi nul même si c'est déconseillé dans les versions ultérieures de rails. Enregistrement.où(id: 0) renvoie un tableau videfind
=> ce est utilisé pour trouver la ligne parid
. Ce sera le retour de dossier unique.find_by
=> ce est utilisé pour obtenir la ligne par les attributs de l'enregistrement. Ce sera le retour de premier correspondant à l'enregistrement si la condition est satisfaite.where
=> ceci est d'obtenir les enregistrements actifs basée sur le retour à des conditions d'enregistrement active de la relation (c) peut être zéro ou plusieurs enregistrements.Simple pour moi....
"Trouver" les retours objet unique, comme un résultat, mais " Où " retourne un Tableau pour vous si vous avez besoin d'ajouter .chaque récupérer chaque objet du tableau.