2010-06-10 3 views
3

J'ai 2 simples named scopes définis comme tels:Enchaînement nommé Scopes ne fonctionne pas comme prévu

class Numbers < ActiveRecord::Base 
    named_scope :even, :conditions => {:title => ['2','4','6']} 
    named_scope :odd, :conditions => {:title => ['1','3','5']} 
end 

si je l'appelle Numbers.even je reviens 2,4,6 qui est correct si j'appeler des numéros. impair je reviens 1,3,5 ce qui est correct

Quand je les enchaîne comme ceci: Numbers.even.odd Je reviens à 1,3,5 parce que c'est la dernière portée que je référence. Donc, si je dis Numbers.odd.even, je voudrais effectivement obtenir 2,4,6.

Je m'attendrais à obtenir 1,2,3,4,5,6 quand je les enchaîne ensemble. Une autre approche que j'ai essayé était le suivant:

named_scope :even, :conditions => ["title IN (?)", ['2', '4','6']] 
named_scope :odd, :conditions => ["title IN (?)", ['1', '3','5']] 

Mais je reçois aucun résultat quand je les Enchaînez parce que la requête crée ressemble à ceci:

SELECT * FROM `numbers` 
WHERE ((title IN ('1','3','5')) AND (title IN ('2','4',6'))) 

La clause « ET » devrait être modifié à OU mais je n'ai aucune idée de comment forcer ça. Cela pourrait-il être un problème avec ActiveRecord ??

Répondre

5

La façon dont ActiveRecord traite les étendues pose un problème. Lorsque vous appliquez plusieurs étendues, les résultats sont joints avec AND. Il n'y a pas d'option pour utiliser OU.

Ce que vous devez faire à la place est de combiner deux ensembles de résultats:

Numbers.even.all + Numbers.odd.all 
Questions connexes