Запрос ActiveRecord - PullRequest
       7

Запрос ActiveRecord

2 голосов
/ 26 мая 2009

У меня есть следующие ActiveRecords

class Product < ActiveRecord::Base  
  has_many :reviews  
end  

class Review < ActiveRecord::Base  
  belongs_to :product  
end  

Каждый объект обзора содержит поле с именем «rating»
Я хочу получить список всех продуктов, средний рейтинг которых превышает определенный предел.
Я не понимаю, как использовать команду find для этого.
Позволяет ли нам делать такие вещи?

Ответы [ 2 ]

1 голос
/ 01 июня 2012

Я бы использовал SQL, когда запросы начинают запрашивать такие вещи, как условия для агрегированных значений, как этот. Существуют различные способы достижения желаемого результата - для меня это наиболее просто:

bound = 3
products = Product.where('id in 
  (
    select product_id 
    from reviews 
    group by product_id 
    having avg(rating) > ?)', bound)
1 голос
/ 26 мая 2009

-Да, это можно сделать. Что-то вроде этого должно сработать ...

 Product.find(:all, :include => 'reviews', :conditions => ['review.rating > ?', min_rating])

Редактировать - Просто перечитайте свой вопрос. Вы хотите использовать средний рейтинг. Для этого я прибегну к SQL или, если это обычная операция, вычислю средний рейтинг и сохраню его в продукте при каждом сохранении рейтинга.

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