Есть ли способ (или способ реализовать аналогичную функциональность), чтобы сделать это fields_for_with_index
?
Пример:
<% f.fields_for_with_index :questions do |builder, index| %>
<%= render 'some_form', :f => builder, :i => index %>
<% end %>
Этот частичный рендеринг должен знать, какой текущий индекс находится в fields_for
цикле.
ruby-on-rails
loops
fields-for
Шпигфорд
источник
источник
Ответы:
На самом деле это был бы лучший подход, более внимательно следуя документации Rails:
От: http://railsapi.com/doc/rails-v3.0.4/classes/ActionView/Helpers/FormHelper.html#M006456
источник
Ответ довольно прост, поскольку решение предоставляется в Rails. Вы можете использовать
f.options
params. Таким образом, внутри вашей визуализации_some_form.html.erb
,Доступ к индексу можно получить:
Больше ничего делать не нужно.
Обновление: похоже, что мой ответ был недостаточно ясным ...
Исходный файл HTML:
Визуализированная подформа:
источник
<%= f.options[:child_index] %>
вашу визуализированную подформу (в данном случае: _some_form.html.erb), а не оригиналbuilder
. Ответ обновлен для получения дополнительных разъяснений.nil
за этоНачиная с Rails 4.0.2, индекс теперь включен в объект FormBuilder:
https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-fields_for
Например:
источник
project_fields.options[:child_index]
. Так мне больше нравится!Для Rails 4+
Патч обезьяны для поддержки Rails 3
Чтобы приступить
f.index
к работе в Rails 3, вам нужно добавить патч обезьяны в инициализаторы ваших проектов, чтобы добавить эту функциональность вfields_for
источник
.index
намного чище.Оформление заказа. Визуализация коллекции частичных файлов . Если ваше требование состоит в том, что шаблон должен проходить по массиву и отображать подшаблон для каждого из элементов.
Это отобразит «_children.erb» и передаст локальную переменную «children» в шаблон для отображения. Счетчик итераций будет автоматически доступен для шаблона с именем формы
partial_name_counter
. В случае приведенного выше примера шаблон будет загруженchildren_counter
.Надеюсь это поможет.
источник
question_comment_form
будучи моим частичным именем ...Я не вижу достойного способа сделать это с помощью способов, предоставляемых Rails, по крайней мере, не в -v3.2.14.
@Sheharyar Naseer ссылается на хэш опций, который можно использовать для решения проблемы, но не настолько, насколько я могу судить, как он, кажется, предлагает.
Я сделал это =>
или
В моем случае
g.object_name
возвращает такую строку"gallery_set[blog_posts_attributes][2]"
для третьего отображаемого поля, поэтому я просто сопоставляю индекс в этой строке и использую его.На самом деле более прохладный (и, может быть, более чистый?) Способ сделать это - передать лямбду и вызвать ее для увеличения.
И в представлении
источник
Я знаю, что это немного поздно, но мне недавно пришлось это сделать, вы можете получить индекс fields_for вот так
Надеюсь, это поможет :)
источник
Добавлено в fields_for child_index: 0
источник
Если вы хотите контролировать индексы, воспользуйтесь
index
опциейЭто произведет
Если форма отправлена, params будет включать что-то вроде
Мне пришлось использовать опцию индекса, чтобы заставить работать несколько выпадающих списков. Удачи.
источник