2010-08-27 10 views
5

Estoy tratando de crear una instrucción 'OR' sql en ActiveRecord 3, probé todo tipo de variaciones pero no puedo resolverlo ...¿Cómo puedo hacer una declaración 'O' en ActiveRecord?

Por ejemplo, quiero que esta consulta incluya múltiples 'channel_ids' y hacer que devuelva todas las publicaciones para cualquiera de las ID de canal. Esto funciona para uno:

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

, pero no puedo encontrar la manera de hacerlo con múltiplos, lo he intentado, por ejemplo:

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

pero no funcionó. ¿Cómo puedo hacer que esto funcione?

Respuesta

4

utilizar los métodos Arel para hacer esto:

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

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

funciona perfecto, muchas gracias. Escuché de Arel antes y lo leeré ahora. Tan limpio. –

4

Prueba esto:

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

Usted debe dejar escapar ActiveRecord listas para usted en lugar de hacerlo usted mismo. Puede dejar 'ids' allí tal cual, no se requiere' join' y se ampliará automáticamente a una lista separada por comas. – tadman

+1

@tadman, thx, actualizó la respuesta. –

Cuestiones relacionadas