首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取上周rails上的热门文章

问获取上周rails上的热门文章
EN

Stack Overflow用户
提问于 2012-08-11 03:52:44
回答 2查看 790关注 0票数 0

希望这是一个相对简单的解决方案。我有一个帖子表和一个点赞表。用户可以喜欢一个帖子,所以帖子has_many like和like belong_to帖子。

考虑到这一点,我该如何从上周获得最受欢迎的帖子(通过点赞)?我希望将解决方案简化为一个查询,因为将查询限制在最近一周应该可以避免任何伸缩问题(我认为)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-11 05:54:02

我建议使用命名作用域来执行此操作。

您的SQL查询将如下所示:

代码语言:javascript
复制
SELECT post_id, count(post_id) as count FROM "likes" 
GROUP BY post_id ORDER BY count desc LIMIT 3

你可以在你的Like类中使用下面的代码:

代码语言:javascript
复制
scope :popular, select("post_id, count(post_id) as count").group(:post_id).order("count desc").limit(3)

然后,当你想要最受欢迎的帖子时,你会这样做

代码语言:javascript
复制
@popular = Like.popular
@popular[0].post_id # this will be the id of the Post
@popular[0].count   # this will be the count of likes for that Post

这样做的一个好处是它将显示所有时间内最受欢迎的帖子。如果您想要将点赞限制在上周内给出的点赞,您可以将上面的select语句放入lambda {}中,并在select之前使用where("created_at < ?", DateTime.now - 1.week)。您甚至可以传入一个参数来控制多长时间的过滤。更多详细信息请参阅ActiveRecord guide details on passing arguments

票数 0
EN

Stack Overflow用户

发布于 2012-08-11 04:12:31

首先,您需要一个变量来表示一周前的日期时间。我认为应该是这样的:

代码语言:javascript
复制
one_week_ago = Time.now - 1.week

在比较前n个帖子的所有帖子之前,您必须计算每个帖子在过去一周内的点赞数量,并将其存储在一个变量中。

代码语言:javascript
复制
likes_for_last_week = post.likes.where("created_at > ?", one_week_ago).count

您可以将所有这些内容存储在一个数组中:

代码语言:javascript
复制
[[post,likes_for_last_week][post,likes_for_last_week]...]

然后使用<=>运算符进行排序。

请原谅我的简短,但由于我是一个相当新手的程序员,这么多的指导需要我进行大量的研究。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11908350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档