RoR случайных четырех пользователей - PullRequest
0 голосов
/ 08 сентября 2010

Кто-нибудь знает, как я могу отобразить список из 4 случайных пользователей в RoR.

Я знаю, что есть метод rand (), но мне нужно как-то применить его к массиву.

1 Ответ

2 голосов
/ 08 сентября 2010

Если таблица не содержит слишком много записей, следующее вернет четырех случайно выбранных пользователей:

User.find(:all, :order => 'RANDOM()', :limit => 4)

Однако, это не масштабируется, поскольку оно рандомизирует всю таблицу . Для таблиц с большим количеством столбцов это может быть очень интенсивным вводом-выводом.

Другой метод состоит в том, чтобы только рандомизировать id, а затем выбирать только эти строки. Что-то вроде:

# Return an array of ids randomly drawn from User
ids = ActiveRecord::Base.connection.select_values(
        User.send(:construct_finder_sql, { :select => 'id', 
                                           :order => 'RANDOM()',
                                           :limit => 4
                                         }))

# Return the users drawn from above
users = User.find(:all, :conditions => "id IN (#{ids.join(',')})")

Если вы пойдете с этим, я бы инкапсулировал его как метод класса User.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...