我需要先找到10条记录然后对其进行排序。
Model.all.limit(10).order('cast(code as integer)')
上面代码的结果是 - 首先它在模型上应用顺序然后限制查询。因此,我在给定模型的列表中获得相同的代码。但是我想首先应用限制查询然后命令获取结果。
答案 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。