У меня есть приложение для направляющих, которое отображает список объектов, названных модулями. Я выполняю итерации по ним, представляя частичное для каждого, который включает вызов 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, так как контроллер ищет определенные именованные средства управления?
Добавьте : 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
Перебрать их с помощью 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