0

Je possède ce schéma:Comment puis-je trier par la moyenne de l'attribut d'un enfant polymorphe avec ActiveRecord 2.3?

class Comment 
    has_many :ratings, :as => :target 
end 

class Rating 
    belongs_to :target, :polymorphic => true 
end 

Je veux écrire un champ nommé qui triera commentaires par leur note moyenne, sans aller chercher la liste complète des commentaires, puis aller chercher toutes leurs évaluations.

Je pense que je dois utiliser: include et: group, mais est-ce que j'utilise aussi: order? Merci.

Répondre

0

Voici ce que je suis allé avec:

module Ratable 
    def self.included base 
    base.has_many :ratings, :as => :target, :dependent => :destroy 
    base.named_scope :rated, :joins => :ratings, :group => 'target_id', :select => "#{base.table_name}.*, avg(ratings.opinion) as 'average_rating'", :order => 'average_rating desc' 
    end 
end