2010-08-29 49 views
21

Actualmente tengo dos consultas de registro activos que me gustaría combinar juntoscombinar dos ActiveRecord los resultados de consultas

 
joins("join relationships ON user_id = followed_id"). 
       where("follower_id = #{user.id}") 

y

 
where(:user_id => user.id) 

Básicamente quiero los resultados de la segunda a aparecer con el primero similar a una declaración UNION en SQL. ¿Se puede hacer en ActiveRecord de esta manera?

Preferiría usar una unión en lugar de tener que unir todas las followed_id s en una cadena y usar la cláusula IN en sql.

¿Alguna idea?

----- ------ Editar Busco una manera de conseguir que esto funcione con carga diferida

Respuesta

12

Uso relation & relation:

Model.joins("join relationships ON user_id = followed_id").where("follower_id = {user.id}") & Model.where(:user_id => user.id) 
+6

Esto fuerza a ActiveRecord a poner los resultados en una matriz con entusiasmo. ¿Se puede hacer esto con la carga lenta? – zzawaideh

+0

por cierto ... Voté su respuesta ya que me llevó allí parte del camino. – zzawaideh

+0

No debería ser esa relación | ¿relación? ActiveRecord :: La relación corta como una matriz y [1] y [2] == [] pero [1] | [2] = [1,2]. – mtjhax

28

Esto era útil para mí :

Model.where(...) | Model.where(...) 
+0

Me salvó aquí. Gracias amigo – Abram

+3

En realidad, esto no está funcionando como se esperaba. – Abram

+15

Esto convierte el objeto ActiveRecord_Relation a Array. No puede aplicar métodos de registro activo como .where, etc. en los objetos resultantes – CodeExpress

Cuestiones relacionadas