Ruby 如何使用视图和创建日期等对对象进行排序?

Ruby 如何使用视图和创建日期等对对象进行排序?,ruby,ruby-on-rails-3,ranking,Ruby,Ruby On Rails 3,Ranking,假设您有一个Item类型的对象,它具有name、view、like和created等属性,我想创建这些对象的提要,这样我仍然可以获得最新的对象,但也可以根据view计数和like计数 使用按时间和排名创建的排序=查看\计数+相似\计数相似 a.sort_by{|x| [x.rank, -x.created_at]} 将导致按排名排序,然后按创建的_排序,该排序将仅用于对象的连接,因此我希望有人能帮助我找到一种方法 提前感谢您。首先:如果您有很多对象/记录,您可能需要在数据库中进行排序,以便能够

假设您有一个Item类型的对象,它具有name、view、like和created等属性,我想创建这些对象的提要,这样我仍然可以获得最新的对象,但也可以根据view计数和like计数

使用按时间和排名创建的排序=查看\计数+相似\计数相似

a.sort_by{|x| [x.rank, -x.created_at]}
将导致按排名排序,然后按创建的_排序,该排序将仅用于对象的连接,因此我希望有人能帮助我找到一种方法


提前感谢您。

首先:如果您有很多对象/记录,您可能需要在数据库中进行排序,以便能够正确地筛选它们。在大多数情况下,这将有几个优点:

1) 您可以限制排序后获取的项目数(这意味着您不必将那么多的项目加载到内存中)

2) 如果您正确使用索引,它将非常快

按多行排序是直截了当的,并在对该问题的回答中进行了解释:

就实际排序而言,如果您想对内存中的数组进行排序,那么您给出的代码应该可以工作:

a.sort_by{|x| [x.rank, -x.created_at]}
你能解释一下问题是什么吗?这似乎是按等级排序,然后按时间排序,如您所指定。您希望通过其他方式进行排序的位置(例如,由排名组成的分数以及项目的最近性)

编辑:

好的,通过你的评论,你希望得到一个分数,这个分数混合了排名和物品的最近程度。出于几个原因,这将是一个棘手的问题。首先,具体如何建模/评分结果将取决于您,您必须相应地调整它(因此可能是
Time.now-item.created_at
乘以排名的一小部分,或者其他什么。这基本上是您必须玩的东西)

仔细想想,最好只使用unix风格的时间戳,而不是在处创建的
Time.now-item.created\u,因为除非有人严重破坏您的安全性,否则数字越高,它就越新。(尽管有时代问题)。此外,这可能会使以后的其他事情变得更容易

例如,可能是这样的:

rank*(item.created_为-130000000)/60000000
, 对于当前时间,将导致
0.7453*等级
,对于从现在开始的一天制作的物品,将导致:
0.7467*等级
(因此稍微高一点)。也许你的解决方案会更复杂。这真的取决于你去找出一个适合你的情况的方程式

另一个问题是,它可能会使SQL查询和索引更加复杂(尽管您可以使用math(即您的评分系统)基于多列为表编制索引)包括在内;这里有一个例子:;这对您来说可能有点棘手,因为它的最近程度将不断变化,所以它可能只是时间戳本身的函数(随着时间的推移而增加,因此最近的项目将固有地具有更高的值))


基本上,您的第一步将是确定哪种数学模型最适合您的需要。试一下。之后,您只需在Rails中高效地实现(正确的数据库查询、索引等)

这正是我想要的,我需要弄清楚如何使用由排名组成的分数,以及该项目最近有多感谢您!这帮了大忙,也澄清了一些事情,我将给你说的一个机会,我一定会查看你提供的链接,再次感谢你!随时都可以。很高兴能为您提供帮助。希望听到您最终使用的方法!