Вот это лучшее решение для получения случайных записей из базы данных. RoR обеспечивает все в простоте использования.
Для получения случайных записей из БД используйте образец, ниже приведено описание этого примера.
Backport of Array # образец на основе Marc-Andre Lafortune's github.com/marcandre/backports/ Возвращает случайный элемент или n случайных элементов из массива. Если массив пуст, а n - nil, возвращает nil. Если n передано и его значение меньше 0, оно вызывает исключение ArgumentError. Если значение n равно или больше 0, оно возвращает [].
[1,2,3,4,5,6].sample # => 4
[1,2,3,4,5,6].sample(3) # => [2, 4, 5]
[1,2,3,4,5,6].sample(-3) # => ArgumentError: negative array size
[].sample # => nil
[].sample(3) # => []
Вы можете использовать условие, соответствующее вашим требованиям, как показано ниже.
User.where (активный: истина) .Sample (5)
он возвращает случайным образом 5 активного пользователя из таблицы пользователя
Для получения дополнительной помощи, пожалуйста, посетите: http://apidock.com/rails/Array/sample
Я слышал, что RAND() очень медленный, потому что он сначала выбирает каждую запись, а затем как-то выбирает один, но я, вероятно, ошибаюсь. –
@Blaenk: Он очень медленно работает на MySQL. Однако я не знаю о реализации. – Swanand
+1 для создания области, мне тоже нравится. –