当你Something.find(array_of_ids)在Rails中,所得到的数组的顺序不依赖的顺序array_of_ids.
有没有办法找到并保存订单?
ATM我根据ID的顺序手动对记录进行排序,但这有点蹩脚.
UPD:如果可以使用:orderparam和某种SQL子句指定顺序,那么如何?
刚刚试用PostgreSQL,来自MySQL.在我们的Rails应用程序中,我们有几个带SQL的位置,如下所示:
SELECT * FROM `currency_codes` ORDER BY FIELD(code, 'GBP', 'EUR', 'BBD', 'AUD', 'CAD', 'USD') DESC, name ASC
Run Code Online (Sandbox Code Playgroud)
没过多久就发现PostgreSQL不支持/允许这样做.
有谁知道如何在PostgreSQL中模拟这种行为,还是我们必须将整理到代码中?
我想获得一个给定一组id的ActiveRecord对象数组.
我认为
Object.find([5,2,3])
Run Code Online (Sandbox Code Playgroud)
将返回一个数组,其中包含对象5,对象2,然后按顺序返回对象3,但我得到的数组按对象2,对象3和对象5排序.
ActiveRecord Base 查找方法API提到您不应该按照提供的顺序期望它(其他文档不提供此警告).
一个可能的解决方案是按相同顺序的ID数组查找的?,但订单选项似乎对SQLite无效.
我可以编写一些ruby代码来自己对对象进行排序(有点简单,缩放比例较差或缩放比较复杂),但是有更好的方法吗?
我想按照我在 array 中传递值的顺序对我的 where 条件结果进行排序。我正在做的是我有一个 id 数组
ids = [80, 20, 3, 91, 84, 90, 98, 97, 68, 99, 92, 73]
Run Code Online (Sandbox Code Playgroud)
当我将此数组传递给 where 条件时,例如:
products = Product.where(id: ids)
Run Code Online (Sandbox Code Playgroud)
它以不同的顺序(随机顺序)返回结果活动记录关系,例如:
=>[ 20 ,84, 3,98 , .............. ]
Run Code Online (Sandbox Code Playgroud)
(这是活动记录关系对象,我在这里只提到了 id)
但我希望它以相同的顺序返回对象,我正在传递类似的值(在活动记录关系对象中而不是数组中)
=> [80, 20, 3, 91, 84, 90, 98, 97, 68, 99, 92, 73]
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点 。