2010-07-29 6 views
1

J'ai cette condition de trouver tirant de mon modèle qui ressemble actuellement à ceci.Rails - Trouver la condition avec des ID partout

@major_set = Interest.find(:all, :conditions => {:id => 1..21}) 

Je voudrais ajouter quelques ID individuels que je viens d'ajouter, qui sont comme 120 ... 130. J'ai essayé de faire ...

@major_set = Interest.find(:all, :conditions => {:id => 1..21, 120..130}) 

mais a obtenu l'erreur. "erreur de syntaxe, inattendue '}', attendez tASSOC ... ns => {: id => 1..21, 122..130})"

Comment puis-je sélectionner plusieurs ensembles d'identifiants ainsi que peut-être certains identifiants individuels, ie (: conditions => {: id => 1..21, 121..140, 144, 155}

Répondre

2

Vous pouvez convertir les plages en grappes et les ajouter ensemble. Par exemple.

@major_set = Interest.find(:all, 
    :conditions => {:id => (1..21).to_a + (120..130).to_a}) 

Si vous souhaitez ensuite ajouter des ID individuels, vous pouvez simplement les ajouter à la baie. Par exemple.

ids_to_find = (1..21).to_a + (120..140).to_a 
ids_to_find << 144 
ids_to_find << 145 
@major_set = Interest.find(:all, :conditions => { :id => ids_to_find }) 
2

Si vous tapez {:id => 1..21, 122..130} dans irb vous obtiendrez une erreur car elle n'est pas .. syntaxe Ruby valide Cela est interprété comme un hachage où le premier élément est :id => 1..21 et le second manque sa clé afin de rendre une expression rubis valide, vous devez taper:

{:id=>[1..21, 122..130]} 

Mais je ne pense pas que ActiveRecord accepte cette syntaxe. Donc, vous devrez peut-être:

:conditions => "id BETWEEN 1 AND 21 OR id BETWEEN 122 AND 130" 

Cela fonctionne dans MySQL. Je ne sais pas si cela fonctionnera dans d'autres bases de données.

+0

Est-ce que le bloc opérateur effectuera la recherche de condition pour les deux ensembles de données? Je veux dire en incluant à la fois 1 ... 21 et 122 ... 130, je veux dire que j'aurais besoin à la fois pas un ou l'autre; donc je me demandais simplement – ChrisWesAllen

+0

Oui, ça va. Je l'ai testé. – gdelfino

Questions connexes