Я думал о том, как Gmail запрашивает их разговоры. Я знаю, что они используют разные технологии, но я хочу имитировать их как можно лучше.
В настоящее время я получаю список разговоров, а затем мне нужно получать сообщения для каждого разговора. Я могу использовать обычное соединение:
Conversation.joins(:messages).first
Но это будет присоединяться к каждому сообщению, а мне нужно только последнее сообщение. Как бы я структурировал этот запрос? Еще лучше было бы присоединиться, когда я делаю Conversation.all:
Conversation.joins(:messages).all # but only join last message for each conversation
Кроме того, могу ли я использовать условия для присоединения к последнему сообщению с определенным идентификатором пользователя?
message.user_id = 1
Conversation.joins(:messages).all # only last message where user_id = 1
Я использую squeel, если это помогает продемонстрировать запрос.
Каков наиболее оптимальный способ извлечения разговоров и последнего сообщения для каждого разговора?