我正在研究我的Rails应用程序的一些规范,涉及在数据库中重新排序模型。
由于模型ID未提前知道,我不想硬编码“模型ID列表应为[1,2,3]”,因此我只是将它们收集在一个数组中,因为我创建它们,例如
(1..3).each
ids << Model.create().id
Model.find(:all, order: position).should == ids
无论如何,我想测试我的重新排序逻辑,该逻辑采用有序ID列表:
Model.reorder( [3,1,2] ) # will change position in db
保持干嘛我只是这样做:
reordered_ids = [ids[3], ids[1], ids[2]]
Model.reorder( reordered_ids )
Model.find(...).should == reordered_ids
我很好奇是否有更优雅的方式来做
reordered_ids = [ids[3], ids[1], ids[2]]
这样可行,但似乎并不好:
[3,1,2].collect{|i| ids[i] }
有什么想法吗?
答案 0 :(得分:1)
reordered_ids = [ids [3],ids [1],ids [2]]
reordered_ids = ids.values_at(3, 1, 2)
(1..3).each ids&lt;&lt; Model.create()。ID
ids = 3.times.map { Model.create.id }
答案 1 :(得分:0)
我的回答并不完全是你提出的问题,但可能是你所需要的。
如何不决定自己重新订购并进行洗牌,例如
reordered_ids = ids.shuffle
更新: 在作者的评论正确指出之后,shuffle未被排序的优先级低,并且他希望它是明确的,我认为我们可以在这种情况下简单地颠倒顺序以使其显式化。 e.g。
reordered_ids = ids.reverse