Сложная вложенность форм в Rails - Как создать желаемый вывод параметров хеш / массива
Я пытаюсь понять, как правильно обрабатывать хэш параметров, чтобы не передавать параметры, которые должны быть вложены несколько раз...
Вот упрощенный (удаленная ненужная информация, такая как ярлыки и т. Д.) Моего кода html.slim (с использованием simple_form):
= f.simple_fields_for :room do |r|
- (1..4).each do |room|
= r.input 'adults',:collection => 1..4,:input_html => {:name => "room[adults][]"}
= r.input 'children',:collection => 0..2,:input_html => {:name => "room[children][]"}
- (1..2).each do |child|
= r.input 'child_age',:input_html => {:name => "children[#{child}][ages][]"}
хорошо это с входами 1 комната, 1 взрослый, 1 ребенок 5 лет, мы получаем такие параметры:
"room"=>{"adults"=>["1", "1", "1", "1"], "children"=>["1", "0"]}, "children"=>{"1"=>{"ages"=>["5", ""]}, "2"=>{"ages"=>["", ""]}}
что я на самом деле хочу иметь в параметрах это:
"room"=>{"adults"=>["1", "1", "1", "1"], "children"=>["1"=>["5",""], "0"=>["",""]] }
Кто-нибудь есть идеи о том, как это сделать?
1 ответ
Решение
Извини я не знаю как simple_form
работает, но вот как я бы сделал это с нормальным rails
хелперы.
<%= f.fields_for :rooms, (rooms_collection) do |r| %>
... # Any inputs you may want
<%= r.fields_for :children, (children_collection) do |c| %>
<%= c.text_field :child_age %>
Это не даст вам точный вклад, который вы хотите, но это даст вам что-то вроде
"room"=>{"adults"=>["1", "1", "1", "1"], "children"=>{"0"=>{child_age => ["5",""]}, "1"=>{child_age => ["",""]}}}
Кроме того, если у вас нет постоянных объектов, это должно работать
<%= f.fields_for :rooms do |r| %>
... # Any inputs you may want
(1..2).each do
<%= r.fields_for :children do |c| %>
<%= c.text_field :child_age %>