2011-01-21 21 views
5

Tengo dos modelos en mi aplicación, notas y aspectos más destacados. Se definen como:SQL UNION con Rails ActiveRecord

class Note < ActiveRecord::Base 
    belongs_to :user 
end 

class Highlight < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

Ahora, deseo que ambos sean accesibles en la misma secuencia, ordenados por fecha de creación. No podía hacerme a la manera de hacer esto en ActiveRecord, así que armar esta consulta:

SELECT book_id, page, content, created_at FROM `highlights` 
INNER JOIN `highlights_users` ON `highlights`.id = `highlights_users`.highlight_id 
WHERE (`highlights_users`.user_id = 1) 
UNION SELECT book_id, page, content, created_at FROM notes 
ORDER BY created_at DESC 

Agregar por supuesto, funciona, pero no se siente muy Carriles-y. Además, no sé cómo decir qué elementos son notas y cuáles son destacados. La otra opción es obtener la secuencia de notas y resaltar las secuencias por separado, luego fusionar las matrices. Eso también parece torpe, y siento que debe haber una abstracción en alguna parte para lo que estoy tratando de hacer.

¿Hay alguna funcionalidad clave de ActiveRecord que me falta aquí? ¿Cuál es la forma más eficiente de hacerlo?

Respuesta

Cuestiones relacionadas