Vote.all.group_by {| v |v.submission_id} .sort_by {| v |v [1] .size}
Снова, быстро и грязно:
Vote.all.group_by {| v |v.submission_id} .sort_by {| v |v [1] .size} .reverse
Это, вероятно, не тот способ, которым вы хотите сделать это в производстве.Вы можете настроить счетчик кеша в таблице представлений (при условии, что в таблице голосов 1 голос за запись):
- Добавить столбец подсчета голосов в миграцию представлений (t.integer: Vote_count,: default => 0)
- В модели (voice.rb) принадлежит_to: submission,: counter_cache => true
Теперь вы можете отсортировать по количеству голосов в таблице представлений:
Submission.order ('ays_count DESC ')