Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: Using form_for multiple times (DOM ids)

Tags:

I would like to use the form_for helper multiple times for the same model in the same page. But the input fields use the same ID attribute (in the HTML), so clicking on the label of a field in another form will select the same input in the first form.

Is there a solution besides settings all attributes manually via :for => "title_#{item.id}" and :id => "title_#{item.id}"?

Using Rails 3.0.9

like image 467
iGEL Avatar asked Jun 21 '11 15:06

iGEL


2 Answers

You can use :namespace => 'some_unique_prefix' option. In contrast to :index, this will not change the value used in the name attribute.

It's also possible to use an array, e.g. when you have nested forms or different forms that happen to have some fields in common: :namespace => [@product.id, tag.id] or :namespace => [:product, @product.id]

like image 105
Marc Schütz Avatar answered Oct 14 '22 21:10

Marc Schütz


I found the answer myself, one can pass a :index option to form_for. That string will be used in the id and for attributes:

<%= form_for @person, :index => @person.id do |f| %>   <%= f.label :name %>   <%= f.text_field :name %>   <%= f.submit %> <% end %> 

will parse

<form accept-charset="UTF-8" action="/person/11" class="edit_person" id="edit_person_11" method="post">   <!-- Hidden div for csrf removed --> <label for="person_11_name">Name</label>  <input id="person_11_name" name="person[11][name]" size="30" type="text" />  <input name="commit" type="submit" value="Update Person" />  </form> 

Notice it'll change the name of the inputs as well.

like image 37
iGEL Avatar answered Oct 14 '22 21:10

iGEL