我认为没有一种简单或干净的方法可以实现这一目标,也没有“Rails 方式”。看看例如这个链接
根据该链接中的一项建议,您将执行此 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')
也是我最初认为应该解决的方法,但我对其进行了测试,但似乎没有得到正确的结果——至少在我的测试数据上是这样。