2010-12-01 14 views
27

Tengo una matriz de nombres de equipo de otra parte del código y quiero encontrar todos los equipos que no están en esa matriz. He intentado lo siguiente y no funciona.activerecord find all NO incluido en una matriz

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

Esto está en Rails 3 y los Googles no nos están dando mucho amor.

+5

Subiendo esta respuesta porque de la deliciosa uso de la frase "los Googles ..." Hasta – jbnunn

+0

voto, ya que necesitaba la misma cosa y también me gustó el "The Googles" –

Respuesta

53

que nunca he hecho esto con un campo de cadena, pero tal vez esto va a funcionar:

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

Si no tiene un índice en su columna de cadena, puede ser muy lento, pero funcionará como esperaba. – tadman

+0

¡Funcionó! Gracias. – kjs3

+1

¿Funciona esto para PG? – Trip

47

Carriles 4 Solución:

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

Además, para acelerar la consulta, se puede:

  • crear un índice en nombre

O

  • cambio de la consulta para utilizar los identificadores que están indexados por defecto
Cuestiones relacionadas