У меня есть цикл, который захватывает введенный пользователем номер (no_reps) и вставляет определенную информацию на основе этого.
Например, если пользователь вводит число 3, число от 1 до 3 будет вставлено вr.repetition_index.
Мне нужно сопоставить каждое из этих уникальных номеров для каждого цикла и вставить переменную treatment_indexes, чтобы для каждого r.repetition_index он не повторял одно и то же число.
Например, результаты моей таблицы должны быть такими, за исключением treatment_index.
|id|treatment_selection_id|repetition_index|treatment_index|
|1 | 1 | 1 | |
|2 | 1 | 2 | |
|3 | 1 | 3 | |
|4 | 2 | 1 | |
|5 | 2 | 2 | |
|6 | 2 | 3 | |
|7 | 3 | 1 | |
|8 | 3 | 2 | |
|9 | 3 | 3 | |
Обратите внимание, что каждый treatment_selection_id
имеет уникальный repetition_index, равный 1..3.Теперь для каждого repetition_index
, равного 1, я хочу вставить уникальное число 1,3 в treatment_index
и т. Д. С repetition_index 2 и 3.
Пока у меня есть следующее, но r.treatment_index
не вставляет уникальный номер для каждого соответствия r.repetition_index
.
no_reps = @trial.number_of_repetitions
@trial.treatment_selections.each do |r|
r.repetitions.in_groups_of(no_reps).each_with_index do |a, i|
treatment_indexes = (1..no_reps).to_a.shuffle
a.each_with_index do |r, j|
r.repetition_index = j + 1
r.treatment_index = treatment_indexes[j]
end
end
end