3

我有一组项目 ID item_ids,.

我将此数组传递给 ActiveRecord 查询以从数据库中检索相应的项目:Item.where(:id => item_ids)

item_ids有没有办法让返回的项目与通过数组传入的顺序相同?

如果它有所作为,我在 Ruby on Rails 3.0.12 上使用 PostgreSQL 作为我的数据库。

4

1 回答 1

4

您可以让数据库进行排序并避免多次index调用,您只需要记住 SQL ORDER BY 按表达式而不是排序:

whens = item_ids.collect.with_index { |id, i| "when #{id} then #{i}" }.join(' ')
items = Item.where(:id => item_ids).order("case id #{whens} end")
于 2012-09-19T21:07:56.267 回答