0

希望这是一个相对简单的解决方案。我有一个帖子表和一个喜欢表。用户可以喜欢一个帖子,所以帖子有_很多喜欢和喜欢属于_to个帖子。

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

4

2 回答 2

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]...]

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

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

于 2012-08-10T20:12:30.750 回答
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 语句放入 alambda {}where("created_at < ?", DateTime.now - 1.week)select. 你甚至可以传入一个参数来控制过滤的距离。更多详细信息请参阅ActiveRecord 指南中有关传递参数的详细信息

于 2012-08-10T21:54:01.630 回答