Сложная вложенность форм в Rails - Как создать желаемый вывод параметров хеш / массива - PullRequest
2 голосов
/ 23 февраля 2012

Я пытаюсь понять, как правильно обрабатывать хэш параметров, чтобы не передавать параметры, которые должны быть вложены несколько раз ..

Вот упрощенный (удаленная ненужная информация, такая как ярлыки и т. Д.) Моего кода 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 Ответ

0 голосов
/ 23 февраля 2012

Извините, я не знаю, как работает 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 %>
...