Rails 3: упорядочение по группам в связанной модели - PullRequest
1 голос
/ 08 апреля 2011

Мой вопрос похож на этот , но этот вопрос не получил правильного ответа, поэтому я хотел бы спросить себя ...

У меня есть представления и голосов .Каждая заявка имеет много голосов через обычные ассоциации has_many и belongs_to.

Мне нужно отсортировать заявки по количеству голосов , которые они имеют .Таблица голосов имеет индивидуальную запись для каждого голоса, с submission_id, ассоциированным с каждой записью, поэтому я не могу просто отсортировать по одному столбцу в связанной модели, и здесь я хотел бы получить вашу помощь.

Ответы [ 2 ]

1 голос
/ 08 апреля 2011

Используйте функцию Rails counter_cache.Подробнее здесь .

1 голос
/ 08 апреля 2011

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 голос за запись):

  1. Добавить столбец подсчета голосов в миграцию представлений (t.integer: Vote_count,: default => 0)
  2. В модели (voice.rb) принадлежит_to: submission,: counter_cache => true

Теперь вы можете отсортировать по количеству голосов в таблице представлений:

Submission.order ('ays_count DESC ')

...