Я работаю над некоторыми спецификациями для моего приложения Rails, которое включает в себя переопределение моделей в базе данных.Ruby Slice Array из другого массива
Поскольку идентификаторы модели не известны заранее, я не хочу жестко кодировать «Список идентификаторов модели должен быть [1,2,3]», поэтому я просто собираю их в массиве как Я создаю их, например
(1..3).each
ids << Model.create().id
Model.find(:all, order: position).should == ids
Во всяком случае, я хочу, чтобы проверить свое переназначение логика, которая принимает список упорядоченных идентификаторов:
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] }
Любые мысли?
Существует некоторая вероятность низкого порядка сортировки перепутанного массива, поэтому не тестируется. Я думаю, что для спецификации он должен быть явным –