2010-12-01 11 views
27

J'ai un tableau de noms d'équipes d'une autre partie de code et je veux trouver toutes les équipes qui ne sont pas dans ce tableau. J'ai essayé ce qui suit et ça ne marche pas.activerecord trouver tout NON inclus dans un tableau

@team_exclude_list = ['Team 1', 'Team 2', 'Team 3'] 
@teams = Team.where("name != ?", @team_exclude_list) 

Ceci est dans Rails 3 et les Googles ne me donnent pas beaucoup d'amour.

+5

Upping cette réponse en raison de l'utilisation délicieuse de l'expression « la Googles ... » – jbnunn

+0

Up vote que je avais besoin même chose et a également aimé les "les googles" –

Répondre

53

Je ne l'ai jamais fait avec un champ de chaîne, mais peut-être cela va fonctionner:

@teams = Team.where("name NOT IN (?)", @team_exclude_list) 
+1

Si vous n'avez pas un index sur votre colonne de chaîne, il peut être très lent, mais il fonctionnera comme prévu. – tadman

+0

A travaillé! Merci. – kjs3

+1

Est-ce que cela fonctionne pour PG? – Trip

47

Rails 4 solution:

@team_exclude_list = ['Team 1', 'Team 2', 'Team 3'] 
@teams = Team.where.not(name: @team_exclude_list) 

En outre, pour accélérer la requête, vous pouvez:

  • créer un index sur le nom

OU

  • modifier la requête à utiliser les ID qui sont indexés par défaut