0

给定

ids = [4, 2, 1, 3]
dishes = Dish.where("restaurant_id in (?)", ids)

是否可以根据 id 的顺序对菜肴进行排序?

=> # I'd like to see something like this
=> dishes.map(&:restaurant_id)
=> [4, 4, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1, 3, 3, 3, 3] etc.

I'm currently getting something like this
=> [1, 4, 3, 4, 4, 3, 3, 2, 3, 2, 4, 4, 4, 3, 4, 2, 2, 2, 2, 4, 3, 1, 1, 1, 3, 2, 2, 1, 4]

我知道我可以循环遍历 id,然后只循环select匹配给定 id 的菜,然后重建数组,但我不能这样做,因为我仍然想will_paginate在关联上使用。

任何帮助或提示将不胜感激,谢谢!

4

1 回答 1

3

我在这里能想到的唯一有效(我的意思是“将其推送到数据库”)的事情是通过迭代餐厅 ID 数组来为数据库构建自定义 order by 子句以生成文本,例如:

order by
  case restaurant_id
    when 4 then 1
    when 2 then 2
    when 1 then 3
    when 3 then 4
  end

希望该模式足以让您推断出构建此类字符串的逻辑。

activerecord 调用应该类似于:

dishes = Dish.where("restaurant_id in (?)", ids).
              order("case restaurant_id when 4 then 1 when 2 then 2 when 1 then 3 when 3 then 4 end")
于 2013-05-29T15:28:03.470 回答