Comment exclure un tableau d'id de requête dans les Rails (à l'aide d'ActiveRecord)?
Je voudrais effectuer une ActiveRecord requête qui retourne tous les documents, sauf ceux qui les documents qui ont une certaine id. L'id je voudrais exclus sont stockées dans un tableau. Donc:
ids_to_exclude = [1,2,3]
array_without_excluded_ids = Item. ???
Je ne suis pas sûr de la façon de remplir la deuxième ligne.
Arrière-plan: Ce que j'ai déjà essayé:
Je ne suis pas sûr de fond est nécessaire, mais j'ai déjà essayé différentes combinaisons de .trouver et .où. Par exemple:
array_without_excluded_ids = Item.find(:all, :conditions => { "id not IN (?)", ids_to_exclude })
array_without_excluded_ids = Item.where( "items.id not IN ?", ids_to_exclude)
D'échec. Cette astuce peut-être sur la bonne voie, mais je n'ai pas réussi à l'adapter. Toute aide serait grandement appréciée.
- Avez-vous essayé
:conditions => [ "id not IN (?)", ids_to_exclude ]
? Remarque les supports plutôt que les accolades. - Dans les Rails 3.2.1 j'ai utilisé ce
MyModel.order('created_at DESC').where('id NOT in (?)', ids_to_exclude).limit(5)
sur une requête récemment
Vous devez vous connecter pour publier un commentaire.
Cela devrait fonctionner:
Et c'est totalement orienté objet, avec pas de chaîne 🙂
ids_to_exclude
est vide. J'ai piraté autour d'elle avecids_to_exclude.push(-1) if ids_to_exclude.empty?
mais il m'a fait me sentir sale. 🙁 Toutes les pensées?SELECT "Items".* FROM "items" WHERE "items"."id" NOT IN (NULL)
. Un match contre NULL est INCONNU. C'est un trois-évalués-problème de logique: en.wikipedia.org/wiki/Three-valued_logicItem.where(Item.arel_table[:id].not_in ids_to_exclude)
Rails 4 solution:
Vous pouvez également utiliser
Squeel
gem pour accomplir une telle requête.La Documentation de lui, va ici