(действительные числа в 100 раз больше, но их проще объяснить следующим образом)
У нас есть набор из 100 отзывов для 5 ресторанов. В некоторых ресторанах 3 или 4 отзыва, в некоторых - 20-30 отзывов.
В настоящее время у меня есть простой отчет, который упорядочивает их от самых новых до самых старых:
@reviews = Review.joins(:store).
where('reviews.published= ?',true).
order("reviews.created_at DESC")
Для одного из моих просмотров отчетов мне нужно отображать обзоры в порядке круговой очереди, что обеспечивает равный охват каждого ресторана в верхней части списка.
most recent for restaurant #A
most recent for restaurant #B
...
most recent for restaurant #E
затем повторите для следующего самого последнего для #A, #B, ... # E
и т.д.
В идеале порядок круговой очереди должен быть таким, какой ресторан имеет наибольшее количество отзывов.
Нетрудно сделать это медленным способом в коде, но мне интересно, есть ли более быстрый / лучший подход activerecord?
===
Есть ли способ (а) сортировать по ресторанам, (б) создать временный столбец «счетчик», который считает от 1 до N для каждой записи для каждого ресторана, (в) пересортировать по этому столбцу счетчика? Это сделало бы это.
Например, после (a) и (b) набор записей будет
A , <some review>, 1
A , <some review>, 2
...
A , <some review>, 23
B , <some review>, 1
B , <some review>, 2
...
B , <some review>, 11
C , <some review>, 1
C , <some review>, 2
...
C , <some review>, 9
Если бы я мог затем отсортировать этот набор записей на счетчике, он бы использовал циклический перебор A, B, C и т. Д.