获取上周的热门文章

时间:2012-08-10 19:52:44

标签: ruby-on-rails ruby activerecord

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

考虑到这一点,我将如何获得上周最受欢迎的帖子(喜欢)?我想将解决方案简化为一个查询,因为将查询限制在最后一周应该保持任何扩展问题(我认为)。

2 个答案:

答案 0 :(得分:0)

首先,你需要一个代表一周前日期时间的变量。我认为它会是这样的:

one_week_ago = Time.now - 1.week

在比较前n个帖子的所有帖子之前,你将需要计算每个帖子上周的喜欢数量并将其存储在变量中。

likes_for_last_week = post.likes.where("created_at > ?", one_week_ago).count

您可以将所有这些存储在数组中:

[[post,likes_for_last_week][post,likes_for_last_week]...]

然后使用< =>进行排序操作

请原谅我的简短,但由于我是一名相当新手的程序员,所以这一指导对我做了大量的研究。

答案 1 :(得分:0)

我建议使用命名范围执行此操作。

您的SQL查询类似于:

SELECT post_id, count(post_id) as count FROM "likes" 
GROUP BY post_id ORDER BY count desc LIMIT 3

您可以使用以下内容在您的Like课程中获得此内容:

scope :popular, select("post_id, count(post_id) as count").group(:post_id).order("count desc").limit(3)

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

@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 {}并在where("created_at < ?", DateTime.now - 1.week)之前使用select。你甚至可以传入一个参数来控制过滤回来的距离。更多详细信息,请参阅ActiveRecord guide details on passing arguments