2009-05-25 10 views
2

は、私は、次のActiveRecordをのActiveRecordクエリ

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

- はい、できます。ちょうどあなたの質問を再読 - このような気にいらは

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

編集 ...トリックを行う必要があります。平均格付けを使用したいとします。私はこれを行うにはSQLに頼るか、それが一般的な操作であれば平均格付けを計算し、評価が保存されるたびに製品に保管します。

関連する問題