web-dev-qa-db-fra.com

Activerecord trouve tout pas inclus dans un tableau

J'ai une gamme de noms d'équipe d'une autre partie du code et je souhaite trouver toutes les équipes non dans ce tableau. J'ai essayé ce qui suit et ça ne marche pas.

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

C'est dans Rails 3 et les googles ne me donnent pas beaucoup d'amour.

38
kjs3

Je n'ai jamais fait cela avec un champ de cordes, mais cela fonctionnera peut-être:

@teams = Team.where("name NOT IN (?)", @team_exclude_list)
64
Stéphan Kochen

Rails 4 Solution:

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

De plus, pour accélérer la requête, vous pouvez:

  • créer un index sur le nom

OR

  • modifiez la requête pour utiliser des identifiants indexés par défaut
67
nslocum