鉴于
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的菜肴然后重建数组但我不能这样做,因为我仍然想使用{{1}关于协会。
任何帮助或提示都将不胜感激,谢谢!
答案 0 :(得分: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")