2010-08-27 5 views
5

Ich versuche, eine 'OR' SQL-Anweisung in ActiveRecord 3 zu erstellen, habe ich alle Arten von Variationen versucht, aber kann es nicht herausfinden ...Wie kann ich eine 'ODER' Anweisung in ActiveRecord machen?

Zum Beispiel möchte ich diese Abfrage mehrere 'Channel_ids' und enthalten Lassen Sie alle Beiträge für eine der Kanal-IDs zurückgeben. Dies funktioniert für einen:

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

aber ich kann nicht herausfinden, wie es mit Multiples zu tun, ich habe zum Beispiel versucht:

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

aber es hat nicht funktioniert. Wie kann ich das schaffen?

Antwort

4

die Arel Methoden an, um dies zu tun:

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

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

funktioniert perfekt, vielen dank. Von Arel vorher gehört und werde es jetzt lesen. So ordentlich. –

4

Try this:

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

Sie sollten Active für Sie eine Liste entkommen lassen, anstatt es selbst zu tun. Sie können dort 'ids 'unverändert lassen, es ist kein' Join 'erforderlich und es wird automatisch zu einer durch Kommas getrennten Liste für Sie erweitert. – tadman

+1

@tadman, thx, aktualisiert die Antwort. –

Verwandte Themen