2010-08-27 10 views
5

Sto cercando di creare un'istruzione SQL 'OR' in ActiveRecord 3, ho provato tutti i tipi di variazioni, ma non può capire ...Come posso creare un'istruzione "OR" in ActiveRecord?

Ad esempio voglio questa query per includere più 'channel_ids' e fare in modo che restituisca tutti i post per qualsiasi ID del canale. Questo funziona per uno:

Post.where(:user => 'mike').where(:channel_id => 0).limit(20) 

ma io riesco a capire come si fa con i multipli, ho provato ad esempio:

Post.where(:user => 'mike').where(:channel_id => ?, [0,1,2,3]).limit(20) 

, ma non ha funzionato. Come posso fare questo lavoro?

risposta

4

Utilizzare le Arel metodi per fare questo:

t = Post.arel_table 
ids = [1,2,3] 

Post.where(
    t[:user].eq("mike").or(t[:channel_id].in(ids)) 
) 
+0

funziona perfettamente, molte grazie. Ho sentito parlare di Arel e lo leggerò ora. Così pulito –

4

Prova questa:

Post.where("posts.user = ? OR posts.channel_id IN (?)", "mike", ids) 
+1

Si dovrebbe lasciare ActiveRecord sfuggire liste per voi, invece di farlo da soli. Puoi lasciare 'ids' lì così com'è, non è richiesto' join' e verrà automaticamente espanso in un elenco separato da virgole. – tadman

+1

@tadman, thx, ha aggiornato la risposta. –

Problemi correlati