Comment puis-je configurer un identifiant unique pour les cases à cocher dans un formulaire multi-enregistrement Rails?

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

Question

J'ai mis en place un Rails à peu près sous la forme qu'il suit les instructions ce Railscast.

Voici le code pour la forme:

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

Et voici le code de la todo partielle:

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

Il fonctionne très bien, mais je suis à la recherche de commencer à appliquer AJAX et je dois chaque case pour avoir un identifiant unique. En ce moment, les balises d'entrée générées ressembler à quelque chose comme ceci:

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

Chaque case à cocher a le même identifiant ( « todo_ids_ »), qui est un problème. Je pense que la solution est honteusement simple, mais je ne le vois pas. Des conseils?

Était-ce utile?

La solution 2

J'ai fini avec une solution similaire à Ryan, mais comme je l'ai écrit dans le commentaire que je devais faire un autre changement. Sous la forme:

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

Dans l'action appelée par la forme:

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

Notez les « params [: todo_ids] .keys » à la fin, ce qui était une solution pour faire face à la manière bizarre les paramètres ont été formatés:

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

Autres conseils

<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> ou tout ce que vous voulez que l'identifiant soit.

Je considère cela comme un bug avec check_box_tag causé par la nature apparemment hackish de donner manuellement le nom todo_ids [] et le code de la méthode appelant sanitize_to_id (nom). Je viens de croiser hier et je contemple un patch.

Pouvez-vous essayer cela et laissez-nous savoir si cela fonctionne:

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

Ceci est le comportement attendu de check_box_tag, comme ce commentaire sur un correctif rejeté explique .

Vous pouvez utiliser collection_check_boxes comme ça ( haml syntaxe, désolé):

# 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

Bien sûr, vous pouvez utiliser partials l'intérieur du bloc, juste passer et utilisez le générateur à l'intérieur.

Vérifiez plus d'options dans l'API docs .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top