Вы можете использовать zip
и карту для этого:
output = arraywithduration.zip(arraywithperson).map do |duration, person|
{
'person': person,
'start_date': start_date,
'duration': duration,
'parent': parent
}
end
{ 'data': output }
С помощью zip
вы можете объединить элементы arraywithduration
и элементы arraywithperson
в массив из 2 элементов, внутри «основного» массива:
# [[1, "Alfredo"], [5, "James"], [3, "John"], [1, "Sarah"], [4, "Vladimir"]]
И map
позволяет перебирать каждый элемент и создавать ха sh с необходимыми ключами и значениями:
# [{:person=>"Alfredo", :start_date=>"22.01.2020", :duration=>1, :parent=>1},
# {:person=>"James", :start_date=>"22.01.2020", :duration=>5, :parent=>1},
# {:person=>"John", :start_date=>"22.01.2020", :duration=>3, :parent=>1},
# {:person=>"Sarah", :start_date=>"22.01.2020", :duration=>1, :parent=>1},
# {:person=>"Vladimir", :start_date=>"22.01.2020", :duration=>4, :parent=>1}]
Чтобы получить начальную дату, как показано в ожидаемом выводе, вы можете использовать strftime
(это строковое BTW):
start_date = Date.today.strftime('%d.%m.%Y')