忽略查找中的ID自动顺序

时间:2015-12-14 23:47:03

标签: ruby-on-rails ruby

我正在尝试通过以下订单检索数据集合:

@all_data= Data.find(@data_ids)

@data_ids - 要检索数据的ID。例如:

数据

ID Name
1   A   
2   B  
3   C  
4   D

如果@data_ids与[3,2,4]类似,我想按顺序检索数据,那就是C,B,D ......事情是它总是检索数据B,C,D顺序。这可能吗?要忽略该顺序并按给定的params顺序检索它?

事情是,

我有两个表,表A和表数据。

Table A: 
Relation, Data_ID, ORDER   
1; 1; 2;  
1; 2; 1;    
2; 3; 3;

所以我想做的是按照我将拥有的关系(2,1)按顺序检索data_id,我正在做,但是当我找到(2,1)时,我收到1,2。

2 个答案:

答案 0 :(得分:2)

在MySQL中,有一项功能可以覆盖自定义排序 - 请查看" Sort by specific ids in ActiveRecord"。

如果您使用Postgres,您可以考虑这种方法(信用额度 Omar Qureshi在" ActiveRecord.find(array_of_ids), preserving order"

中的答案{{3}}
unsorted = Model.find(arr)
sorted = arr.inject([]){|res, val| res << unsorted.detect {|u| u.id == val}}

答案 1 :(得分:0)

只需从数据库中提取记录,然后在内存中对它们进行排序。当你想要获取的内容相对较少时,这就有用了。

Data.find(@data_ids).sort_by!{|data| @data_ids.index(data.id)}

P.S。您总是以id的顺序获取数据的原因是主键总是被索引,并且数据库以某种顺序(asc或desc)遍历索引。