Vérifiez si l'enregistrement n'existe pas dans Rails (à partir du tableau des ID)?
Je peux le faire pour vérifier si un enregistrement(s) existe (à dire avec l'id "1" existe, mais "2" et "3" ne le font pas):
Model.exists?(:id => [1, 2, 3]) #=> true
Comment dois-je faire le contraire, donc:
Model.not_exists?(:id => [1, 2, 3]) #=> true
source d'informationauteur Lance Pollard
Vous devez vous connecter pour publier un commentaire.
Si vous avez seulement besoin de rechercher des enregistrements par le biais de l'ID, vous pouvez essayer ce
Si l'un de l'Id n'existe pas de
find
méthode de soulever un ActiveRecord::RecordNotFound exception que nous avons tout simplement l'attraper et renvoyer true.Excusez mon anglais 🙂
il suffit d'ajouter une ! opérateur
Explication: si (et seulement Si) tous les cas, vous êtes à la recherche pour exister,
Model.where(id: ids).count
est égal àids.size
.Cependant si il y a un ou plusieurs cas de manquant, le comte sera plus faible, ce qui signifie qu'il y a un dossier qui n'existe pas.
Utilisation
empty?
c'est ce que vous voulez. Il utilisecount(*)
vsselect 1 as one
.Plus Ruby-esque façon de le faire serait d'utiliser
unless
avecexists?
. De cette façon, vous n'avez pas à utiliser!
. J'imagine que votre cas est quelque chose comme ceci:Vous pouvez remplacer
1, 2, 3
avec une variable (que l'on appelleraid
ou quelque chose) et même de supprimer le tableau tout à fait si vous souhaitez:.exists?(id: id)
Un autre moyen simple est d'utiliser la méthode avec un tableau d'id.