2009-08-12 15 views
9

C'è un modo per combinare gli ambiti in modo additivo?Concatenamento additivo con named_scope

Se ho gli scopi

User.big_haired 

e

User.plays_guitar 

posso chiamare

User.big_haired.plays_guitar 

e ottenere tutti gli utenti che dispongono di grandi capelli e giocare la chitarra. Posso scrivere questo per ottenere tutti gli utenti che hanno i capelli grandi o suonare la chitarra?

Credo di dover aggiungere che mi rendo conto che è possibile eseguire una serie di query e aggiungere i risultati insieme. Questo è quello che sto cercando di non fare.

risposta

2

in modo da avere:

class User < ActiveRecord::Base 
    named_scope :big_haired, :conditions => {:hair => 'massive'} 
    named_scope :plays_guitar, :conditions => {:plays => 'guitar'} 
end 

User.big_haired.plays_guitar => Molti utenti.

Non sono a conoscenza di un metodo per schiacciare i due insieme. Forse solo mescolando le matrici:

@users = (User.big_haired + User.plays_guitar).uniq 
0

Ho appena provato questo fuori su alcuni dei miei modelli che hanno named_scopes definiti. Metterà insieme le condizioni come una condizione AND se la combini. Quindi ...

User.big_haired.plays_guitar 

si tradurrà in (ovviamente la mia SQL stenografia, non i veri binari generati roba)

SELECT * FROM users WHERE hair = 'massive' AND plays = 'guitar' 

Non so di un modo di combinarli come una relazione OR. Sarebbe incredibilmente complesso mescolarvi quando pensate alle varie opzioni. Colleghiamo continuamente named_scopes, funziona bene (a patto che li vogliate insieme ad AND).

a fare la e caso, vorrei creare una speciale ambito denominato con le condizioni OR costruite su, o utilizzare un sindacato per la produzione di un unico insieme in questo modo:

User.big_haired | User.plays_guitar 
Problemi correlati