2011-04-08 94 views
1

我的問題是類似this但一個沒有得到正確的答案,所以我想問一下我自己...的Rails 3:通過關聯的模型分組排序

提交。每個投稿都有許多投票通過通常的has_manybelongs_to協會。

我需要排序投票數得票數他們有。投票表有每個投票的單獨條目,每個記錄都有一個submission_id,所以我不能只在相關模型中按單列進行排序,這就是我希望得到您的幫助的地方。

回答

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,:默認=> 0)
  2. 在模型(vote.rb)belongs_to的:提交,:counter_cache =>真

現在,您可以通過votes_count在提交表格排序:

Submission.order( 'votes_count DESC')

+0

使用'.all'是災難的祕訣,因爲它加載了表中的每一條記錄,可能是一個非常非常大的數字。至少你應該考慮範圍。更好的是,編寫一個只提取你需要的值的查詢。 – tadman 2011-04-08 19:45:57

1

使用滑軌counter_cache功能。查看更多here

+0

使用計數器緩存使這種事情變得非常快速和簡單。只要確保在計數器列上對錶格進行索引,以確保數據庫不必每次都進行排序。 – tadman 2011-04-08 19:46:57

相關問題