标签: ruby-on-rails postgresql activerecord
我想在我的一个列上使用rank()函数PostgreSQL。
Character.select("*, rank() OVER (ORDER BY points DESC)")
但是由于我的表中没有rank列,因此rails不包含查询。什么是获得我的ActiveRecord对象中的排名的正确方法?
答案 0 :(得分:4)
试试这个:
Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
它应该返回具有rank属性的Character对象,如 here 所示。但是,这可能不是数据库无关的,如果你传递对象,往往会变得混乱。
另一个(昂贵的)解决方案是在您的表中添加一个排名列,并且每当保存或销毁记录时,使用.order重新计算所有记录的排名。
编辑
另一种适用于单一记录查询的想法可以见 here