2015-01-28 2 views
0

У меня есть два класса. User и Review (У пользователя много отзывов).Rails - запрос n случайных записей из ассоциации

Я пытаюсь найти то лучший способ извлечь два случайных отзывы от ассоциации User.reviews

я могу использовать user.reviews.order("RANDOM()").limit(n), но если я не ошибаюсь, это будет очень тяжело на БД, если у меня есть пользователи с большое количество обзоров ...

Я использую Postgres как мою базу данных.

Мысли?

+0

Какая БД вы используете? –

+0

Я использую Postgres. Добавлен вопрос. Благодаря! –

+0

Я думаю, что это .. Ок .. как DB родной метод позаботится об этом .. –

ответ

2

База данных независимое решение будет:

user.reviews.where(id: user.reviews.pluck(:id).sample(2)) 

Я всегда предпочитаю базы данных независимых решений, так как в противном случае это не имеет смысла использовать ActiveRecord вообще. Очевидно, что это решение делает два запроса БД по сравнению с вашим подходом RANDOM(). Производительность - это сложный вопрос, потому что база данных может кэшировать эти запросы. Он не может кэшировать запрос RANDOM().

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