2009-05-25 2 views
2

У меня есть следующие ActiveRecordsActiveRecord запрос

class Product < ActiveRecord::Base 
    has_many :reviews 
end 

class Review < ActiveRecord::Base 
    belongs_to :product 
end 

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

ответ

1

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

bound = 3 
products = Product.where('id in 
    (
    select product_id 
    from reviews 
    group by product_id 
    having avg(rating) > ?)', bound) 
1

-Да, он может это сделать. Somthing, как это следует сделать трюк ...

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

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

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