2009-05-25 21 views
2

Ich habe folgende ActiveRecordsActive Abfrage

class Product < ActiveRecord::Base 
    has_many :reviews 
end 

class Review < ActiveRecord::Base 
    belongs_to :product 
end 

Jede Bewertung Objekt ein Feld ‚Bewertung‘
Ich möchte, um eine Liste aller Produkte, deren durchschnittliche Bewertung größer als eine bestimmte Grenze genannt enthält.
Ich verstehe nicht, wie Sie den Befehl find verwenden, um dies zu tun.
Können wir solche Dinge tun?

Antwort

1

Ich würde SQL verwenden, wenn Abfragen nach Bedingungen wie aggregierten Werten fragen, wie dies der Fall ist. Es gibt verschiedene Möglichkeiten, um das gewünschte Ergebnis zu erzielen - das fühlt sich am einfachsten an:

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

-Ja, es kann es tun. Somthing wie dies sollte es tun ...

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

bearbeiten - einfach Ihre Frage noch einmal lesen. Sie möchten die durchschnittliche Bewertung verwenden. Ich würde zu diesem Zweck auf SQL zurückgreifen oder, wenn es sich um eine übliche Operation handelt, die Durchschnittsbewertung berechnen und sie jedes Mal im Produkt speichern, wenn eine Bewertung gespeichert wird.

Verwandte Themen