我首先尝试按日期对帖子(称为Topic)进行分组,以便最新的帖子出现在最前面。在那之后,我想在顶部显示该日期的最高投票。
这是我的控制器:topics_controller.rb
@topics = Topic.tally.group(created_at: :desc).order('vote_count')
但我的输出就像这样,
我希望显示第28个帖子,第27个帖子和第26个帖子。 我在这里做错了什么?
更新:
这是我希望帖子页面看起来如何的示例。
9月28日
发布5,10个upvotes
帖子4,7赞成
9月27日 帖子3,17赞成 帖子2,15赞成
9月26日 帖子1,26 upvote
答案 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来对行进行分组,以便进行聚合操作(例如count
,sum
,avg
,. ..)可以折叠分组的行以产生某种类型的摘要。
如果您想订购商品,请订购:
@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')