How do I set a unique ID for checkboxes in a multi-record Rails form?

Grant Heaslip picture Grant Heaslip · Jun 14, 2009 · Viewed 6.9k times · Source

I've set up a Rails form roughly following the instructions in this Railscast.

Here's the code for the form:

<% form_tag complete_todos_path, :method => :put do %>
    <ul>
    <div id="incomplete_todos">
    <% @incomplete_todos.each do |todo| %>
        <%= render :partial => todo %>
    <% end %>
    </div>
    </ul>
    <%= submit_tag "Mark as completed" %>
<% end %>

And here's the code for the todo partial:

<div class="todo">
    <li>
        <%= check_box_tag "todo_ids[]", todo.id %>
        <%=h todo.name %>
        <%= link_to 'edit', edit_todo_path(todo) %>
        <%= link_to 'delete', todo, :confirm => 'Are you sure?', :method => :delete %>
    </li>
</div>

It's working great, but I'm looking to start implementing AJAX and I need each checkbox to have a unique id. Right now, the input tags generated look something like this:

<input id="todo_ids_" name="todo_ids[]" type="checkbox" value="7" />

Every check box has the same id ("todo_ids_"), which is a problem. I suspect the solution is embarrassingly simple, but I'm not seeing it. Any tips?

Answer

BJ Clark picture BJ Clark · Jun 14, 2009

<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> or whatever you want the id to be.

I consider this a bug with check_box_tag caused by the seemingly hackish nature of manually giving it the name todo_ids[] and the method code calling sanitize_to_id(name). I just ran into this yesterday and I'm contemplating a patch.