Concatenar (pegamento) donde las condiciones por O o Y (Arel, Rails3)

Tengo varias consultas complejas (usando subconsultas, etc.) y quiero unirlas con la instrucción O o AND.

Por ejemplo:

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

Me gustaría algo como

 where3=where1.or where2 

El siguiente ejemplo no funciona para mí:

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

porque tengo varias donde (…) consultas y quiero concatenarlas.

En otras palabras

Tengo 3 methods: primero return primero donde, segundo segundo, tercero – O concatenación.

Debo haber podido usar los 3 methods en mi aplicación y save el código DRY

¿Estás buscando la forma?

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

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

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

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

Sé que para AND concatenación puedes hacer:

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

y obtienes una concatenación con AND en SQL (pruébalo con #to_sql al final)

Aparte de eso, puedes 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'"