2011-01-21 15 views
5

Ho due modelli nella mia app, note e punti salienti. Essi sono definiti come:UNIONE SQL con Rails ActiveRecord

class Note < ActiveRecord::Base 
    belongs_to :user 
end 

class Highlight < ActiveRecord::Base 
    has_and_belongs_to_many :users 
end 

Ora, voglio che sia accessibile nello stesso flusso, ordinati per data di creazione. Non ho potuto avvolgere la mia testa intorno a come fare questo in ActiveRecord, così ho messo insieme questa query:

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 

Add naturalmente, funziona, ma non si sente molto Rails-y. Inoltre, non so come dire quali oggetti sono note e quali sono i punti salienti. L'altra opzione è quella di ottenere il flusso di note ed evidenziare i flussi separatamente, quindi unire gli array. Anche questo sembra goffo, e sento che deve esserci un'astrazione da qualche parte per quello che sto cercando di fare.

C'è qualche funzionalità chiave di ActiveRecord che mi manca qui? Qual è il modo più efficiente per farlo?

risposta

Problemi correlati