それを達成するための簡単でクリーンな方法や「Railsの方法」はないと思います。たとえば、このリンクを見てください
そのリンクの 1 つの提案によると、次のSQL 要求を実行します。
SELECT h1.*
FROM highlights h1
LEFT JOIN highlights h2
ON (h1.user_id = h2.user_id
AND h1.highlight_type_id = h2.highlight_type_id
AND h1.created_at < h2.created_at)
WHERE h2.id IS NULL AND h1.user_id = <the user id you are interested in>
group by h1.highlight_type_id
おそらく大きなテーブルがあると、パフォーマンスの問題が発生すると思いますが、それほどきれいではないと思います。
それ以外の場合、ユーザーのハイライトがあまりない場合は、次のようにします。
rows = {}
user.highlights.order('highlight_type_id, created_at DESC').each do |hi|
rows[hi.highlight_type_id] ||= hi
end
# then use rows which will have one object for each highlight_type_id
on created_atDESC
は重要です
編集:
これに基づいていくつかの提案も見ました
。user.highlights.group('highlight_type_id').order('created_at DESC')
それが最初に解決すべきだと思った方法でもありましたが、テストしたところ、少なくとも私のテストデータでは正しい結果が得られないようです。