Я пытаюсь реализовать частный обмен сообщениями на основе потоков в Rails.
Ниже приводится моя модель сообщения:
Table name: messages
id :integer not null, primary key
sender_id :integer
recipient_id :integer
sender_deleted :boolean default(FALSE)
recipient_deleted :boolean default(FALSE)
subject :string(255)
body :text
read_at :datetime
created_at :datetime
updated_at :datetime
messagethread_id :integer
Я создаю новую тему для нового разговора между любыми двумя пользователями.
Я использую следующий запрос, чтобы найти последнее неосуществленное сообщение каждой темы для данного пользователя (пример: с id = 1):
SELECT *
FROM messages LEFT JOIN
(SELECT *
FROM messages m3
WHERE (m3.sender_id = 1 AND m3.sender_deleted = FALSE)
OR (m3.recipient_id = 1 and m3.recipient_deleted = FALSE)) AS m2
ON (messages.updated_at, messages.id) < ( m2.updated_at, m2.id)
AND m2.messagethread_id = messages.messagethread_id
WHERE ((messages.sender_id = 1 AND messages.sender_deleted = FALSE) OR (messages.recipient_id = 1 AND messages.recipient_deleted = FALSE)) AND m2.updated_at IS NULL
Я хотел бы реализовать это в моей модели / контроллере рельсов и отобразить результаты в соответствующем представлении.
Может кто-нибудь, пожалуйста, руководство о том, как получить эти результаты в массиве сообщений? Заранее спасибо!