我的Article
模型具有view_count
属性。
我想在rank
模型中创建一个返回文章排名的Article
方法。 IE浏览器。最高view_count获得排名:1。
我该怎么做?我的第一直觉是查询Article.all
并编写一些ruby代码来执行此操作。有没有更有效的方法通过查询来做到这一点?
答案 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
并在生成列表时显示排名。