2010-11-06 11 views
5

Tengo varias consultas complejas (usando subconsultas, etc ...) y quiero unirlas con la instrucción O o AND.Concatenar (pegamento) donde las condiciones por O o Y (Arel, Rails3)

Por ejemplo:

where1=table.where(...) 
where2=table.where(...) 

me gustaría algo así como

where3=where1.or where2 

siguiente ejemplo no funciona para mí:

users.where(users[:name].eq('bob').or(users[:age].lt(25))) 

debido a que tienen varias donde (. .) consultas y quiero concatenar ellos.

En otras palabras

tengo 3 métodos: primero volver primero donde, segundo a segundo, tercero - OR concatenación.

Debo tener poder usar todos los 3 métodos en mi aplicación y guardar SECO código

Respuesta

2

¿Está buscando la forma:

users.where(users[:name].eq('bob').or(users[:age].lt(25))) 

docs: https://github.com/rails/arel

+0

He añadido la respuesta al tema ... –

0

I sepa que para AND concatenación puede hacer:

users = User.where(:name => 'jack') 
users = users.where(:job => 'developer') 

y se obtiene una concatenación con AND en SQL (probarlo con #to_sql al final)

Aparte de eso que puede hacer:

where1=table.where(...) 
where2=table.where(...) 
where1 & where2 

ejemplo:

(User.where(:name => 'jack') & User.where(:job => 'dev')).to_sql 
=> "SELECT `users`.* FROM `users` WHERE `users`.`name` = 'jack' AND `users`.`job` = 'dev'" 
1

usuarios .where (users [: name] .eq ('bob'). or (users [: age] .lt (25))) está cerca, pero necesita obtener arel_table para especificar las columnas, por ej.

t = User.arel_table 
User.where(t[:name].eq('bob').or(t[:age].lt(25))) 
Cuestiones relacionadas