LEFT SELF JOIN в Rails - основанный на потоках личный обмен сообщениями - PullRequest
1 голос
/ 18 июня 2011

Я пытаюсь реализовать частный обмен сообщениями на основе потоков в 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

Я хотел бы реализовать это в моей модели / контроллере рельсов и отобразить результаты в соответствующем представлении.

Может кто-нибудь, пожалуйста, руководство о том, как получить эти результаты в массиве сообщений? Заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...