我正在尝试通过以下订单检索数据集合:
@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。
答案 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)遍历索引。