¿Cómo se configura un identificador único para casillas de verificación en un formulario de varias récord rieles?

StackOverflow https://stackoverflow.com/questions/992094

Pregunta

He creado unos rieles formar más o menos siguiendo las instrucciones de este Railscast.

Este es el código para el formulario:

<% 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 %>

Y aquí está el código para el TODO parcial:

<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>

Está funcionando muy bien, pero estoy buscando a empezar a aplicar AJAX y necesito cada casilla para tener un identificador único. En este momento, las etiquetas de entrada generadas ser algo como esto:

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

Cada casilla de verificación tiene el mismo ID ( "todo_ids_"), que es un problema. Sospecho que la solución es vergonzosamente simple, pero no lo veo. ¿Algún consejo?

¿Fue útil?

Solución 2

Terminé usando una solución similar a la de Ryan, pero como he escrito en el comentario que tuvo que hacer un cambio más. En la forma:

<%= check_box_tag "todo_ids[#{todo.id}]", todo.id %>

En la acción llamado por la forma:

Todo.update_all(["completed_at = ?", Time.now], :id => params[:todo_ids].keys)

Tenga en cuenta los "params [: todo_ids] .keys" al final, que era una solución para hacer frente a la extraña manera se formatean los parámetros:

"todo_ids" => {"5"=>"5"}

Otros consejos

<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> o lo que usted quiere que el ID sea.

Considero que esto es un error con check_box_tag causado por la naturaleza aparentemente hacker de dar manualmente los todo_ids nombre [] y el código del método llamando sanitize_to_id (nombre). Me acabo de encontrar con esto ayer y estoy contemplando un parche.

Se puede probar esto y hacernos saber si funciona:

check_box_tag "todo_ids[#{todo.id}]", todo.id %>

Este es el comportamiento esperado de check_box_tag, como este comentario en una solución rechazada explica .

Puede utilizar collection_check_boxes como esto ( haml sintaxis, lo siento):

# Accumulate todos in a params hash like { todos: { to_complete: [] } }
= collection_check_boxes(:todos, :to_complete, @incomplete_todos, :id, :name) do |todo_builder|
  = todo_builder.label do
    # This is the result of calling :name on the todo, as specified
    # calling the helper
    = todo_builder.text
    = todo_builder.check_box

Por supuesto, puede utilizar parciales dentro del bloque, sólo tiene que pasar y utilizar el constructor en el interior.

Vea más opciones en el .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top