ここでたくさん検索しましたが、同様のトピックは見つかりませんでした。will_paginateを使用して結果を参照するため、Arelでクエリを作成する必要があります。そのため、生のSQLを使用した実装ではかなり快適になりません。
これが私がアレルで綴る必要があるものです:
SELECT m.*
FROM messages m
JOIN (SELECT tmp.original_id as original_id,
max(tmp.id) as id
FROM messages tmp
WHERE tmp.recipient_id = ?
GROUP BY tmp.original_id) g ON (m.id = g.id)
ORDER BY m.updated_at DESC;
簡単に説明すると、サブクエリはユーザーのすべてのメッセージを取得します。メッセージに新しい返信がある場合(返信では、参照メッセージIDをoriginal_idとして保存します)、古いメッセージは無視されます。これらすべてのメッセージの結果として、Railsに対応するオブジェクトを配信してもらいたいと思います。
私はSQLにかなり熟練していますが、残念ながらArelには精通していません。どんな助けでも親切にいただければ幸いです。