Hãy thử những cách sau:
@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}" }
Để bao gồm các tài nguyên có 0 phiếu bầu, hãy sử dụng liên kết ngoài. Nếu ví dụ dưới đây không hoạt động, bạn sẽ phải thay đổi câu lệnh kết hợp để kết hợp trên các quan hệ chính xác.
@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")