Я просто пытаюсь загрузить 5 случайных объектов в контроллере рельсыПолучение х число случайных объектов
Thing.all(:limit => 5, :order => "RANDOM()")
Это наименее дорогой способ сделать это?
Я просто пытаюсь загрузить 5 случайных объектов в контроллере рельсыПолучение х число случайных объектов
Thing.all(:limit => 5, :order => "RANDOM()")
Это наименее дорогой способ сделать это?
Короткий ответ: нет.
Что вы просили, чтобы db: выполните порядок всей таблицы вещей в случайном порядке ... затем захватите меня пять из них. Если в вашей таблице есть много строк ... это очень дорогостоящая операция.
Лучшая опция (если идентификаторы являются автоматическим приращением и, следовательно, вероятно параллельными), это сгенерировать набор случайных идентификаторов в пределах диапазона id для вашей таблицы предметов и получить эти отдельные вещи этими идентификаторами.
Это самый лучший способ:
Thing.all.sample(5)
Вы можете уточнить, почему это «наименее дорогой способ сделать это»? – Leigh
Да, не уверен. Образец работает только с полным набором (он произвольно упорядочивает массив и вытаскивает первый N, который вы запрашиваете). Это зависит от вас, вытаскивая весь набор вещей ... –