Rails 3 - ActiveRecord + функции MySQL и RANDOM - PullRequest
1 голос
/ 10 февраля 2012

Мне нужно получить из базы данных 3 случайных элемента, у меня есть этот запрос:

User.joins(:user_cities).where("user_cities.city_id = ?", > @city.id).offset(rand(User.count)).limit(3)

, и это генерирует меня:

SELECT `users`.* FROM `users` INNER JOIN `user_cities` ON `user_cities`.`user_id` = `users`.`id` WHERE (user_cities.city_id = 1) LIMIT 3 OFFSET 15

Где потерялась функция RAND?Этот запрос возвращает пустой набор, когда я удаленно OFFSET 15, так что я получаю около 3 результатов, но каждый раз одни и те же результаты.

Что не так с функцией RAND в ActiveRecord?

1 Ответ

3 голосов
/ 10 февраля 2012

ActiveRecord не имеет никакого метода ранда.Вы используете метод rand, предоставленный классом ruby ​​Kernal.

Когда вы используете rand (num) ruby, найдите случайное число от 0 до этого числа.

Для получения трех случайных записей вы можете

User.joins(:user_cities).where("user_cities.city_id = ?", > @city.id).order('rand()').limit(3)
...