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?
avevo dimenticato tutto di STI. Hai ragione, sembra esattamente quello di cui ho bisogno. Grazie! –