Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:无需排序即可查找记录_Ruby On Rails_Ruby_Sorting_Find - Fatal编程技术网

Ruby on rails RubyonRails:无需排序即可查找记录

Ruby on rails RubyonRails:无需排序即可查找记录,ruby-on-rails,ruby,sorting,find,Ruby On Rails,Ruby,Sorting,Find,我需要按照作为搜索参数传入的确切顺序查找记录 例如,我有一个字符串: item_list = "23,12,54,45" 通过下面的查询,我获得asc顺序为“item_list”-“12,23,45,54”的记录 如何修改上述查询,使其以与“item_list”相同的顺序返回记录 谢谢。试试这个,尽管它可能只在MySQL中工作: Inventory.where("id IN (#{item_list})").order("find_in_set(id, '#{item_list}')") 对

我需要按照作为搜索参数传入的确切顺序查找记录

例如,我有一个字符串:

item_list = "23,12,54,45"
通过下面的查询,我获得asc顺序为“item_list”-“12,23,45,54”的记录

如何修改上述查询,使其以与“item_list”相同的顺序返回记录


谢谢。

试试这个,尽管它可能只在MySQL中工作:

Inventory.where("id IN (#{item_list})").order("find_in_set(id, '#{item_list}')")

对于较小的数据集,您可以让Ruby对结果进行排序,但我认为,对于较大的数据集,最好让数据库为您进行排序。

在客户端进行排序,如下所示:

item_list.split(",").collect do |item|
  Inventory.find(item)
end
ids   = item_list.split(',')
items = Inventory.find(ids).sort_by { |i| ids.index(i.id) }
这只使用一个查询,并且只为每个项目计算一次块,这样零件就不会那么昂贵。如果您有很多项要处理,那么您可以轻松构建一个哈希,将id映射到其索引,并在
sort\u by
块中使用它

基本思想是使用另一个数组的结构对一个数组进行排序,例如:

>> a = [ 23, 11, 42, 5 ]
>> b = [5, 23, 11, 42]
>> b.sort_by { |i| a.index(i) }
=> [23, 11, 42, 5]

您计划返回的最大数据集是什么?不应该收集而不是每个数据集吗?@Christopher:可以;取决于你想做什么。一般来说,你可能是对的。阿伦:是的,没错。但它确实解决了手头的问题,尽管可能不如你的方式有效。
ids   = item_list.split(',')
items = Inventory.find(ids).sort_by { |i| ids.index(i.id) }
>> a = [ 23, 11, 42, 5 ]
>> b = [5, 23, 11, 42]
>> b.sort_by { |i| a.index(i) }
=> [23, 11, 42, 5]