按创建日期排序帖子,然后使用Thumbs Up投票最高

时间:2014-09-28 11:20:29

标签: sql ruby-on-rails ruby rails-activerecord

我首先尝试按日期对帖子(称为Topic)进行分组,以便最新的帖子出现在最前面。在那之后,我想在顶部显示该日期的最高投票。

这是我的控制器: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赞成

9月27日 帖子3,17赞成 帖子2,15赞成

9月26日 帖子1,26 upvote

2 个答案:

答案 0 :(得分:0)

这样做:

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

答案 1 :(得分:0)

SQL的GROUP BY(带有ActiveRecord的AKA group)没有按照您的想法执行。你这么说:

  

我正在尝试按日期对帖子(称为Topic)进行分组,以便最新的帖子出现在最前面。

但是你没有使用GROUP BY来订购东西,你使用GROUP BY来对行进行分组,以便进行聚合操作(例如countsumavg ,. ..)可以折叠分组的行以产生某种类型的摘要。

如果您想订购商品,请订购:

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

当然,由于您的created_at时间戳可能是唯一的(或几乎如此),vote_count将被有效忽略,因为不会有任何需要中断的created_at关系。您说要按 date 排序,但created_at时间戳(即日期和时间)。如果您真的想按日期排序,请将created_at投射到日期:

@topics = Topic.tally.order('cast(created_at as date) desc, vote_count asc')
相关问题