【问题标题】:What's the best way to rank models in rails在rails中对模型进行排名的最佳方法是什么
【发布时间】:2011-04-12 01:21:36
【问题描述】:

假设我有一个使用 Rails 和 MySQL 的博客应用程序的 PostsComments

我想按 cmets 的数量对帖子进行排名。 (注意:不只是排序,而是得到他们实际的 1st,2nd,3rd rank)。

另外,给定一个帖子,我希望能够在不将所有帖子加载到 Rails 并搜索它们的情况下获得它的排名。

例如"这篇文章的 cmets 数量排名第 372"

最后,如果两个帖子的 cmets 数量相同,则它们的排名应该相同 - 所以平局是可以的。

我在 MySQL 中似乎有一些巧妙的解决方案,例如这篇文章: How do I Handle Ties When Ranking Results in MySQL?

我想知道是否有一个更简单的解决方案,通过规范化帖子表的附加字段中的一些数据。

有没有人看到这个的好方法?

【问题讨论】:

  • 定义排名。总可以在帖子的一个计数器缓存列中缓存cmets的数量,然后搜索max cmets,但是没有更详细的排名要求,我想不出别的了。

标签: mysql ruby-on-rails ranking rank


【解决方案1】:

仔细考虑这一点,我认为您可以通过几种不同的方式来添加此功能。

您可以将 Redis 添加到组合中并使用其排序集功能,这是本文中得分最高的示例,http://jimneath.org/2011/03/24/using-redis-with-ruby-on-rails.html

在我看来,这可能是最好的设计。您将分析部分与数据收集部分分开,并使用 Redis 最擅长的部分。

另一种方法是创建一个记录 post_id 和评论计数的 PostRanking 模型。您可以为此设置一个默认范围,以按 cmets 的数量降序排序并轻松查询。

【讨论】:

    【解决方案2】:

    这个问题看起来与为:counter_cache 关联选项给出的示例相同。

    Take a look.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      • 2010-09-18
      • 2012-04-20
      • 2010-12-16
      • 1970-01-01
      相关资源
      最近更新 更多