来自其他数组的Ruby切片数组
我正在为我的Rails应用程序制定一些规范,这些规范涉及在数据库中重新订购模型 由于模型ID没有提前知道,我不想硬编码“模型ID列表应该是[1,2,3]”,所以我只是在创建它们时将它们收集到一个数组中,例如来自其他数组的Ruby切片数组,ruby,arrays,Ruby,Arrays,我正在为我的Rails应用程序制定一些规范,这些规范涉及在数据库中重新订购模型 由于模型ID没有提前知道,我不想硬编码“模型ID列表应该是[1,2,3]”,所以我只是在创建它们时将它们收集到一个数组中,例如 (1..3).each ids << Model.create().id Model.find(:all, order: position).should == ids 为了保持干爽,我只做: reordered_ids = [ids[3], ids[1], ids[2]
(1..3).each
ids << Model.create().id
Model.find(:all, order: position).should == ids
为了保持干爽,我只做:
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] }
有什么想法吗
重新排序的_id=[ids[3],ids[1],ids[2]]
(1..3)每个ID我的答案并不完全是你问的,但可能是你需要的 不如不要自己决定重新排序,做一个洗牌,比如
reordered_ids = ids.shuffle
更新:
在作者的评论正确指出了洗牌的优先级很低,并且他希望它是明确的之后,我认为我们可以简单地颠倒顺序,使其明确。e、 g
reordered_ids = ids.reverse
洗牌数组排序的概率很低,因此不进行任何测试。我认为规范应该是明确的
ids = 3.times.map { Model.create.id }
reordered_ids = ids.shuffle
reordered_ids = ids.reverse