2011-07-09 9 views
15

Buscando un método simple utilizando registro activo para tomar datos de dos modelos, combine los datos, y luego clasifique la salida combinada por created_at.¿combinar los resultados de dos consultas y ordenar por created_at? [carriles 3]

Por ejemplo:

asumir dos modelos, Comentario & igual tanto belongs_to usuario

devolver una lista combinada de los comentarios y gustos @ del usuario, ordenados por fecha

Sé que puedo hacer esto en SQL pero realmente me gustaría una solución de registro activa.

Gracias!

Respuesta

21

creo que debe ser tan simple como:

combined_sorted = (User.comments + User.likes).sort{|a,b| a.created_at <=> b.created_at } 
+0

esto me acerca, devolviendo los dos resultados de la consulta en una sola matriz pero no los mezcla en función de created_at. Devuelve los comentarios ordenados por created_at seguidos de los "me gusta" ordenados por created_at. Necesito todos los registros mezclados, así que obtengo un flujo cronológico de actividad de comentarios/me gusta – istan

+0

¿qué pasa con esta edición? –

+0

bingo. ¡gracias una tonelada! – istan

0

¿Qué tal algo así (no probado):

class User < ActiveRecord::Base 
    scope :activities_by_date, :joins(:comments).joins(:likes).order("created_at desc") 
end 

entonces usted puede hacer @user.activities_by_date y dejar que el PP haga todo el trabajo

+0

No funciona para mí. –

+0

Además, está llamando al alcance sobre la instancia del usuario. debería ser: 'User.activities_by_date' –

Cuestiones relacionadas