Rails form_for в функции другого значения

Я пытаюсь использовать помощник form_for для создания формы с переменным количеством текстовых полей.

на одной странице у меня есть форма, которая принимает два значения:

<%= form_for :specs, url: specs_path do |f| %> <p> <%= f.label :title %><br> <%= f.text_field :title %> </p> <p> <%= f.label :sections %><br> <%= f.text_field :sections %> </p>

<p> 
    <%= f.submit %>
</p>`

<% end %>

Это приведет меня на другую страницу, где я хотел бы иметь форму с переменным количеством текстовых полей. Количество полей будет = до <%= @specs.sections %> Я еще не добавил регулярное выражение;) (я сделаю это, как только я уверен, что это лучший способ) если <%= @specs.sections %> равно двум, я бы хотел иметь форму, которая выглядит так: <%= form_for :sections, url: sections_path do |f| %> <p> <%= f.label :head_chord %><br> <%= f.text_field :head_chord %> </p>

<p>
    <%= f.label :section_1_chord %><br>
    <%= f.text_field :section_1_chord %>
</p>

<p>
    <%= f.label :section_2_chord %><br>
    <%= f.text_field :section_2_chord %>
</p>

<p> 
    <%= f.label :foot_chord %>
    <%= f.text_field :foot_chord%>
</p>

<p> 
    <%= f.label :camber %>
    <%= f.text_field :camber %>
</p>

<p> 
    <%= f.label :draft_position %>
    <%= f.text_field :draft_position %>
</p>

<p> 
    <%= f.submit %>
</p>

<% end %> </p>

(раздел - единственный переменный аспект.) Я ценю любое предложение! Спасибо за прочтение :D


person Damien Robichaud    schedule 13.09.2014    source источник


Ответы (1)


Если вы хотите передать на сервер переменное количество параметров, вам лучше поместить их в массив. Таким образом, ваш контроллер может легче с ними справиться. Поэтому вместо section_1_chord, section_1_chord, ... используйте section_chord[]. Вы можете сделать это следующим образом:

<%= form_for :sections, url: sections_path do |f| %>  <p>
<p>
    <%= f.label :head_chord %><br>
    <%= f.text_field :head_chord %>
</p>
<%= @specs.sections.each_with_index do |section, index| %>
    <p>
        <%= label_tag "section_chord-#{index}", "section #{index}"%><br>
        <%= text_field_tag 'section_chord[]', nil, id: "section-chord-#{index}" %>
    </p>
<% end %>

Таким образом, rails обрабатывает section_chord как массив. Этот код не тестировался и, скорее всего, нуждается в некоторой очистке, но он должен работать.

person AOG    schedule 13.09.2014
comment
каждый_с_индексом не определен. по словам местного хозяина. - person Damien Robichaud; 13.09.2014
comment
и если я хочу использовать только числа в качестве входного значения, нужно ли мне делать что-то другое? Спасибо - person Damien Robichaud; 13.09.2014
comment
Ой, извини. Я думал, что разделы - это активный массив записей. Если это просто число, замените цикл на: `‹% @specs.sections.times do |index| %› - person AOG; 13.09.2014
comment
Чтобы разрешить только числа, измените text_field_tag ​​на number_field_tag. - person AOG; 13.09.2014
comment
Спасибо, <% @specs.sections.to_i.times do |index| %> работает на рекорд :) Вы очень помогли! - person Damien Robichaud; 14.09.2014
comment
единственное, что @specs.sections печатается на странице ниже этой части формы, вы знаете что-нибудь об этом? - person Damien Robichaud; 14.09.2014
comment
Рад слышать, что это сработало. Да, to_i пытается преобразовать строки в целые числа, я думал, что sections уже является числом. - person AOG; 14.09.2014
comment
Ох, если его поставить вне формы в дом, то он не работает. - person AOG; 14.09.2014
comment
Я не уверен, в чем проблема, но убедитесь, что вы закрываете форму после цикла. - person AOG; 14.09.2014
comment
Это происходит независимо от того, закрываю ли я его сразу после этого, или если я продолжаю его, а затем закрываю. - person Damien Robichaud; 15.09.2014