对活动记录的限制查询应用排序

时间:2016-03-10 09:54:16

标签: ruby-on-rails ruby postgresql

我需要先找到10条记录然后对其进行排序。

Model.all.limit(10).order('cast(code as integer)')

上面代码的结果是 - 首先它在模型上应用顺序然后限制查询。因此,我在给定模型的列表中获得相同的代码。但是我想首先应用限制查询然后命令获取结果。

4 个答案:

答案 0 :(得分:1)

当您在模型上调用.all时,它会在数据库上执行查询并返回所有记录,以便在limit - .all之前应用Model.limit(10).all来编写它,但之后你不能使用SQL函数来操作数据。因此,要获得前10条记录并对其应用订单,请尝试以下方法:

records = Model.limit(10).all.sort_by{|o| o.code.to_i}

records = Model.first(10).sort_by{|o| o.code.to_i}

答案 1 :(得分:1)

试试这个:

Model.limit(10).sort{|p, q| q.cost <=> p.cost}

答案 2 :(得分:0)

您需要做的就是删除.all方法:

Model.limit(10).order('cast(code as integer)')

答案 3 :(得分:0)

如果你想获得10个随机记录然后对它们进行排序而不从数据库中获取所有记录,那么你可以使用

Model.limit(10).order("RANDOM()")

这使用PostgreSQL rand()函数随机化记录。

现在你有一个包含10个随机记录的数组,你可以按照BitOfUniverse的描述使用.sort_by。