Wypróbuj następujące:
@resources = Resouce.select("resources.*, COUNT(votes.id) vote_count")
.joins(:votes)
.where(language_id: "ruby")
.group("resources.id")
.order("vote_count DESC")
@resources.each { |r| puts "#{r.whatever} #{r.vote_count}" }
Aby uwzględnić zasoby z 0 głosami, użyj sprzężenia zewnętrznego. Jeśli poniższy przykład nie działa tak, jak jest, będziesz musiał zmienić instrukcję joins, aby połączyć się w odpowiednich relacjach.
@resources = Resource.select("resources.*, COUNT(votes.id) vote_count")
.joins("LEFT OUTER JOIN votes ON votes.votable_id = resources.id AND votes.votable_type = 'Resource'")
.where(language_id: "ruby")
.group("resources.id")
.order("vote_count DESC")