Rails:如何使用 .where 查找 id 数组但已排序?

Dyl*_*yen 2 ruby ruby-on-rails

我正在尝试查找使用的商店列表.where,但我也试图将它们排序为相同的 id 数组。

IE

  ids = ["4", "15", "10", "20", "1"]
  stores = Store.published.where(id: ids)
Run Code Online (Sandbox Code Playgroud)

看起来商店是按 id 的升序返回的,就像这样 [{id: 20}, {id: 15} {id: 10}, {id: 4}, {id: 1}]。我希望按照与ids订购方式相同的方式对退回的商店进行订购。另请注意,每个商店中的 id 都是整数,而数组中的 idids是字符串。

spi*_*ann 5

因为数字是记录的 ID,所以您可以简单地使用:

ids = ["4", "15", "10", "20", "1"]
stores = Store.find(ids)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为find它也接受 ID 列表,并且当提供列表时,find将以与列表中相同的顺序返回记录。

Ruby on Rails 7.0中,您将能够where与 结合使用in_order_of,其优点是如果未找到记录,则不会引发错误,并且您也可以按其他列及其值进行排序:

ids = ["4", "15", "10", "20", "1"]
stores = Store.where(id: ids).in_order_of(:id, ids)
Run Code Online (Sandbox Code Playgroud)