Rails 3:通过在关联模型中分组进行排序

时间:2011-04-08 04:41:40

标签: ruby-on-rails-3 sorting associations

我的问题类似于this,但是那个问题没有得到正确答案,所以我想问自己......

我有提交投票。每个提交都通过通常的has_manybelongs_to关联进行了多次投票。

我需要投票数 对提交内容进行排序。投票表每个投票都有一个单独的条目,每个记录都有一个submission_id,所以我不能只按相关模型中的一个列进行排序,这就是我希望得到你帮助的地方。 / p>

2 个答案:

答案 0 :(得分:1)

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. 将votes_count列添加到提交迁移(t.integer:votes_count,:default => 0)
  2. 在模型中(vote.rb)belongs_to:submission,:counter_cache =>真
  3. 现在您可以在提交表中按votes_count排序:

    Submission.order('votes_count DESC')

答案 1 :(得分:1)

使用Rails counter_cache功能。查看更多here