2014-09-28 65 views
0

我試圖按日期先將日誌分組(稱爲主題)分組,以便最新日期排在最前面。在那之後,我想顯示最高票的那一天的最高票數。按創建日期排序,然後使用大拇指投票最高

這裏是我的控制器:topics_controller.rb

@topics = Topic.tally.group(created_at: :desc).order('vote_count') 

但我的輸出出來這樣的,要顯示

index.html.erb

我想28後,27日的訊息,接着26號後。 我在這裏做錯了什麼?

更新: 下面是我希望我的帖子頁面顯示的示例。
9月28日 後5,10個upvotes 郵政4,7 upvotes

9月27日 後3,17 upvotes 後2,15 upvotes

9月26日 張貼1 ,26 upvote

+1

你想按日期排序,所以你在使用'group'? – 2014-09-28 12:48:22

+0

不是一個答案,但看着你的用戶界面,你有標題和身體所以你爲什麼使用他們的組?我的意思是它會一直顯示正文和標題的第一篇文章,所以你能解釋一下你的用例嗎?另外,在order子句中,您使用的是vote_count,但它應該是''created_at desc'' – Mandeep 2014-09-29 17:05:55

+0

我想要做的是按日期分組,因此我得到了部分。並在該部分通過投票安排職位。 – 2014-09-30 01:53:11

回答

0

是這樣的:

@topics = Topic.tally.group(created_at: :desc).order('created_at,vote_count') 
+0

我剛試過這個。它似乎沒有幫助:( – 2014-09-28 11:44:41

+0

更改「created_at,vote_count」 – scottxu 2014-09-28 11:46:46

+0

http://guides.rubyonrails.org/active_record_querying.html#ordering – scottxu 2014-09-28 11:48:27

0

SQL的GROUP BY(帶有ActiveRecord的AKA group)不會執行您認爲的操作。你說:

我試圖按日期先組合帖子(稱爲主題),以便最新的頂部。

,但你不使用GROUP BY訂購的東西,你可以使用使用GROUP BY分組行,以便聚集操作(如countsumavg,...)可以摺疊分組行產生某種總結。

如果你想訂購的東西,然後命令他們:

@topics = Topic.tally.order('created_at desc, vote_count asc') 

當然,因爲你的created_at時間戳可能是唯一的(或接近),則vote_count將被有效忽略,因爲不會有任何created_at需要打破的關係。你說你想排序日期created_at時間戳(即日期和時間)。如果你真的想按日期排序,然後投給created_at日期:

@topics = Topic.tally.order('cast(created_at as date) desc, vote_count asc') 
+0

我不想按日期排序,我的意思是當我表示「最新排在最前面」是根據日期將帖子分組在一起,以便今天發佈的帖子排在最前面,然後「今日」組中的帖子按投票次序排列 因此,帖子看起來像此 9月28日 後5,10個upvotes 郵政4,7 upvotes 9月27日 後3,17 upvotes 後2,15 upvotes 9月26日 後1,26 upvotes – 2014-09-28 17:44:54

+0

也許需要提供一些示例輸出到澄清事情 – 2014-09-28 17:54:49

+0

我將示例輸出添加到問題中!希望它有幫助:) – 2014-09-29 12:02:01

相關問題