0

我正在为我的 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] }

有什么想法吗?

4

2 回答 2

1

reordered_ids = [ids[3], ids[1], ids[2]]

reordered_ids = ids.values_at(3, 1, 2)

(1..3).each ids << Model.create().id

ids = 3.times.map { Model.create.id }
于 2012-06-16T17:13:48.483 回答
0

我的回答不完全是你问的,但可能是你需要的。

不自己决定重新排序并进行洗牌怎么样,比如

reordered_ids = ids.shuffle

更新:在作者的评论正确指出之后,shuffle 未排序的优先级较低,并且他希望它是明确的,我认为我们可以在这种情况下简单地颠倒顺序以使其明确。例如

reordered_ids = ids.reverse
于 2012-06-17T00:34:43.537 回答