Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 带Rails的Postgres窗口函数列_Ruby On Rails_Postgresql_Activerecord - Fatal编程技术网

Ruby on rails 带Rails的Postgres窗口函数列

Ruby on rails 带Rails的Postgres窗口函数列,ruby-on-rails,postgresql,activerecord,Ruby On Rails,Postgresql,Activerecord,我想在我的一列上使用rank()函数PostgreSQL Character.select("*, rank() OVER (ORDER BY points DESC)") 但由于我的表中没有rank列,rails没有将其包含在查询中。要将排名包括在我的ActiveRecord对象中,正确的方法是什么?试试以下方法: Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters") 它应

我想在我的一列上使用rank()函数PostgreSQL

Character.select("*, rank() OVER (ORDER BY points DESC)")
但由于我的表中没有rank列,rails没有将其包含在查询中。要将排名包括在我的ActiveRecord对象中,正确的方法是什么?

试试以下方法:

Character.find_by_sql("SELECT *, rank() OVER (ORDER BY points DESC) FROM characters")
它应该返回具有秩属性的角色对象,如文档所述。但是,这可能不是数据库不可知的,并且如果传递对象,会变得混乱

另一个(昂贵的)解决方案是在表中添加一个列,并让回调函数在保存或销毁记录时使用.order重新计算所有记录的列

编辑:


另一个适合于单记录查询的想法是,即使find\u by\u sql在ActiveRecord中不返回秩列,也可以看到

。我看到了你联系的另一个问题,但我认为它不适合我的情况。我正在对结果进行分页,这将对每个记录运行一个查询。rank()函数是我发现的最好的方法,我就是不能让它工作。你确定吗?我刚刚在一个Rails 3.0.9应用程序上,在Postgre+Postgis和MRI Ruby 1.9.2-p180上试过这个,它可以工作(在控制台中)。如果您在控制台中尝试此操作,inspect方法不会返回属性,因此您看不到它,但它确实存在(您可以通过调用对象上的.attributes或直接调用rank来查看)。啊,是的,您是对的。当我没有看到它的时候,我刚刚把它删除了。我真不敢相信我没有想到要把这个列添加到数据库中。只要在SELECT语句中rank()是最后一个,似乎就可以正常工作。