Как я могу сортировать по среднему значению полиморфного дочернего атрибута с помощью ActiveRecord 2.3?

У меня есть эта схема:

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

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

Я хочу написать именованную область, которая будет сортировать комментарии по их среднему рейтингу, не извлекая весь список комментариев, а затем извлекая все их рейтинги.

Я думаю, что мне нужно использовать :include и :group, но нужно ли мне также использовать :order? Спасибо.


person schwabsauce    schedule 03.10.2010    source источник


Ответы (1)


Вот с чем я пошел:

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
person schwabsauce    schedule 13.10.2010