2014-02-03 2 views
0

Я использую следующий метод в моем Rails 4 приложение, чтобы получить случайные записи в модели:RANDOM() не работает в Rails 4.0.2

Model.order('RANDOM()').limit(5) 

Это сломался после обновления до Rails 4.0.2. Он всегда получает самые последние записи. Любые идеи почему?

+0

Что тонированное SQL-запрос выглядит так (из журнала)? –

+0

SELECT «model». * FROM «model» ORDER BY created_at DESC, RANDOM() LIMIT 5 – 6thSigma

+1

У вас есть какая-то область заказа по умолчанию на «Модели», о которой вы сейчас не знаете? – steakchaser

ответ

2

Вы либо должны удалить область по умолчанию из модели или назвать это так:

Model.unscoped.order('RANDOM()').limit(5) 
0

Просто используйте Model.all.sample(5)

+1

Это может работать нормально для очень маленьких наборов данных, но приведенное выше будет очень неэффективным, если Modal.all возвращает любое значительное количество строк, поскольку все они будут возвращены, объекты будут созданы, и только тогда будет Массив # образец случайным образом выбирает 5 из них. –

+2

[Для получения дополнительной информации о том, что Филипп имеет в виду] (http://stackoverflow.com/a/12038506/877472) –

+0

Yup ... получил то, что вы говорите. Благодарю. –

Смежные вопросы