0

我正在尝试创建一个 Reddit 类型的应用程序,其中列表的顺序取决于链接的赞成票数和创建日期的组合。我的计划是在我的“链接”表中创建一个新列,将“created_date”和“upvotes”组合成一个“排名值”,然后按“排名值”对列表进行排序。

这是正确的方法吗?如果是这样,我如何使用 ActiveRecord 创建这个表列?

4

2 回答 2

1

如果存在纯粹用于显示目的的元属性,则创建一个动态生成它的方法是合适的。

如果你也想用它来排序你的对象,最好将它存储在一个列中。希望它不依赖于当前时间之类的东西,而只依赖于它的其他属性:

before_save :calculate_rank

def calculate_rank
  self.rank = self.upvotes + self.clicks * 5;
end

不幸的是,对于您的用例,您明确表示您的专栏取决于创建日期,可能是“它有多新鲜”——一个移动的目标。

您可以通过两种方式解决这两个问题:无限期地不断增加rank新链接的值,或者将项目放入时间桶并定期更新它们(可能在一天或一周结束时降低它们的分数)。

于 2013-08-20T00:55:36.810 回答
0

您可以在模型中创建方法,例如“rank_value”,它会根据您的标准进行排序,然后调用 Model.rank_value

于 2013-08-20T00:45:15.810 回答