Несколько remote_form_for на той же странице вызывают дублирующиеся идентификаторы

У меня есть приложение для направляющих, которое отображает список объектов, названных модулями. Я выполняю итерации по ним, представляя частичное для каждого, который включает вызов remote_form_for.

Это все работает, но сбои проверка HTML, потому что мои текстовые поля формы у всех есть тот же идентификатор.

Есть ли a: опция префикса на форме (или что-то еще) я могу использовать для обхождения этого?

Обновление:
(некоторый код)

    //_module_form.html.erb
    <% remote_form_for app_module do |f| %>
         <%= f.label :name %>
         <%= f.text_field :name %>
         <%= submit_tag 'Save' %>
    <%end %>

    //parent page
    <% @thing.modules.each do |app_module| %>
       <%= render :partial => "module_form", :locals => { :app_module => app_module } %>
    <% end %>

Таким образом, если у меня есть больше чем 1 объект в наборе, я представляю идентичную форму на той же странице, и идентификатор формы и идентификатор текстового поля дублированы.

Я могу настроить идентификатор формы довольно легко, но что относительно text_box, так как контроллер ищет определенные именованные средства управления?

6
задан Ben Scheirman 11 March 2010 в 19:52
поделиться

2 ответа

Добавьте : index => object.id в хэш параметров при создании формы. Это должно генерировать идентификаторы в форме object_id_attribute , не мешая контроллеру.

Править

Документация относительно : index неоднозначно вводит в заблуждение. : индекс действительно влияет на отправку формы. Решение состоит в том, чтобы указать атрибут : id для каждого поля. Это изменит свойство id , оставив name невредимым (это то, что учитывается при отправке).

Вот код, который я использую в универсальном помощнике для генерации этих полей:

def create_field( f, field_type, object, field_name )
    field_id = "#{object.class.name.downcase}_#{object.id.to_s}_#{field_name.to_s}"
    f.send( field_type, field_name, :id => field_id )
end
2
ответ дан 17 December 2019 в 18:13
поделиться

Перебрать их с помощью collection.each_with_index do | item, i | , затем частичный проход рендеринга в локальной переменной:

render :partial => "some_partial", :locals => {:form_id => "form_id_#{i}"}

Затем в частичном вы можете получить доступ к <% = form_id%>

Это был бы один из способов сделать это.

Я предполагаю, что в remote_form_for вы можете передать: id => form_id или: html_options => {: id => form_id}

Похоже, вы можете, см.: http : //api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001649

1
ответ дан 17 December 2019 в 18:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: