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 

私がやっていることをDRYに保つために:

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 = [ID[3]、ID[1]、ID[2]]

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

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

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

私の答えはあなたが尋ねたものではありませんが、おそらくあなたが必要としているものです.

再注文を自分で決めずシャッフルしてみたらどうですか?

reordered_ids = ids.shuffle

更新:著者のコメントで、シャッフルがソートされない優先度が低く、明示的であることを望んでいることが正しく指摘された後、その場合は単純に順序を逆にして明示的にすることができると思います。例えば

reordered_ids = ids.reverse
于 2012-06-17T00:34:43.537 に答える