Случайная запись в ActiveRecord

The \ - возможно, не работал, потому что вы передали весь материал с сервера строкой. Если это так, сначала вы должны убежать \, поэтому серверная программа также может обрабатывать его.

  • В строке на стороне сервера: \\ -
  • На клиентская сторона: \ -
  • В регулярном выражении (обложки): -

Или вы можете просто положить в и [] скобки.

146
задан user2262149 28 August 2018 в 06:10
поделиться

2 ответа

Я не нашел идеального способа сделать это без использования как минимум двух запросов.

В следующем примере в качестве смещения используется случайно сгенерированное число (до текущего количества записей).

offset = rand(Model.count)

# Rails 4
rand_record = Model.offset(offset).first

# Rails 3
rand_record = Model.first(:offset => offset)

Честно говоря, я просто использовал ORDER BY RAND() или RANDOM() (в зависимости от базы данных). Это не проблема производительности, если у вас нет проблемы производительности.

130
ответ дан 23 November 2019 в 22:32
поделиться

Ваш пример кода начнет вести себя неточно после удаления записей (это будет несправедливо благоприятствовать элементам с более низкими идентификаторами)

Вероятно, вам лучше использовать случайные методы в вашей базе данных. Они различаются в зависимости от того, какую базу данных вы используете, но :order => "RAND()" работает для mysql, а :order => "RANDOM()" работает для postgres

Model.first(:order => "RANDOM()") # postgres example
73
ответ дан 23 November 2019 в 22:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: