私は、gmail が彼らの会話をどのように照会するかについて考えてきました。彼らが異なるテクノロジーを使用していることは知っていますが、できる限り模倣したいと考えています。
現在、会話のリストを取得してから、会話ごとにメッセージを取得する必要があります。通常の結合を使用できます。
Conversation.joins(:messages).first
しかし、それはすべてのメッセージに結合され、最後のメッセージだけが必要です。このクエリをどのように構成しますか? Conversation.all を実行するときに参加するのがさらに良いでしょう。
Conversation.joins(:messages).all # but only join last message for each conversation
さらに、条件を使用して、特定のユーザー ID を持つ最後のメッセージを結合できますか?
message.user_id = 1
Conversation.joins(:messages).all # only last message where user_id = 1
クエリのデモンストレーションに役立つ場合は、squeel を使用しています。
会話を取得する最適な方法と、各会話の最後のメッセージは何ですか?