Предположим, у вас есть модель для элементов с атрибутом голосов. Здесь может быть какой-то выборка данных:Сортируйте запрос базы данных по столбцу, а затем произвольно
Item, Votes
-----------
Red 4
Blue 5
Black 5
Green 4
Cyan 5
Yellow 4
Orange 4
Я хочу, чтобы область применения, что сначала сортирует их по голосам:
Item, Votes
-----------
Orange 4
Green 4
Yellow 4
Red 4
Blue 5
Black 5
Cyan 5
А потом рандомизирует его в каждой группе голосов:
Item, Votes
-----------
Green 4
Red 4
Orange 4
Yellow 4
Black 5
Blue 5
Cyan 5
И тогда ограничивает его двумя первыми результатами.
Я попытался это:
scope :options, -> { order('random()').order("votes asc").limit 2 }
и это:
scope :options, -> { order("votes asc").order('random()').limit 2 }
Но ни работает, как ожидалось. Первая версия кажется абсолютно случайной, а вторая версия не является случайной.
Когда вы говорите, «первые два результата», вы имеете в виду первый результата от каждой группы (4 и 5 голосов)? Если вы имеете в виду первые два из младшей группы, ваше второе решение работает: 'scope: options, -> {order ('votes ASC, random()'). Limit (2)}' – Drenmi