你如何获得Rails中整数属性的“排名”?

时间:2014-06-05 02:11:38

标签: ruby-on-rails

我的Article模型具有view_count属性。

我想在rank模型中创建一个返回文章排名的Article方法。 IE浏览器。最高view_count获得排名:1。

我该怎么做?我的第一直觉是查询Article.all并编写一些ruby代码来执行此操作。有没有更有效的方法通过查询来做到这一点?

2 个答案:

答案 0 :(得分:1)

效率不高,但

之类的东西
  def rank
   (Article.where('view_count > ?', self.view_count).count) + 1
  end

答案 1 :(得分:0)

您可以在从数据库

获取元素的同时对元素进行排序

Article.order(:view_count)可能有限制Article.order(:view_count).limit(10)

如果你真的需要存储排名,你现在可以执行以下操作:

top_ten = Article.order(:view_count).limit(10)
top_ten.each_with_index.do |article,i|
  article.rank = i
  article.save
end

但是每次view_count更改时你都必须更新它,所以它应该更好 存储view_count并在生成列表时显示排名。