0

我想用total_content_length來分類論壇用戶。讓高層n作家在論壇上,我做的:現在如何根據「total_content_length」和最近的帖子對論壇用戶進行排序?

User.order("total_content_length DESC").limit(n) 

,問題是當有兩個(或更多)用戶使用同一total_content_length。 在這種情況下,我想優先考慮最近創建帖子的用戶。

Postpublisher_id字段(這是一個用戶id)。

你會如何做到這一點?

回答

1

嘗試使用2點階聲明:

User.order("total_content_length DESC").order("created_at DESC").limit(n) 

試試這個:

class User < ActiveRecord::Base 
    scope :your_scope_name, joins(:posts).order("posts.created_at DESC") 
end 

,那麼你可以結合使用此scope與其他報表

+0

用戶'created_at'是不是與此有關。它應該以某種方式與'Post'的'created_at'相關。 – 2011-05-22 11:55:46

+0

所以你可以爲用戶創建一些範圍,你可以在其中找到他的帖子並通過created_at來訂購它們,然後你可以用你的新範圍替換.order(「created_at DESC」) – bor1s 2011-05-22 12:07:27

+0

你會如何爲用戶編寫這個範圍? – 2011-05-22 13:04:58

0

定義的方法在你的提供最新帖子日期的用戶模型(假設您有帖子關聯):

def date_of_last_post 
    posts.order('created_at DESC').limit(1)[0].created_at 
end 

然後你就可以得到結果爲:

top_posters = User.order("total_content_length DESC").limit(n) 
# write a conditional sorting algo that swaps values only 
# if a.total_content_length == b.total_content_length based on 'date_of_last_post' 
+0

這是不對的,因爲當您執行'sort!'時,您忘記了以前的'order'排序... – 2011-05-22 13:57:14

+0

已編輯我的答案這不是最好的方法,但可以讓你暫時去,你可以使用任何標準的排序算法。 – 2011-05-22 15:28:11

相關問題