Domanda

Ho impostato una Rotaie di forma approssimativamente seguendo le istruzioni questo Railscast.

Ecco il codice per il modulo:

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

Ed ecco il codice per il todo parziale:

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

Funziona alla grande, ma sto cercando di iniziare l'implementazione di AJAX e ho bisogno di ogni casella di controllo per avere un id univoco.Ora, il tag input generato un aspetto simile a questo:

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

Ogni casella di controllo ha lo stesso id ("todo_ids_"), che è un problema.Ho il sospetto che la soluzione è imbarazzante semplice, ma io non sto vedendo.Qualche consiglio?

È stato utile?

Soluzione 2

Ho finito per usare una soluzione simile a Ryan, ma come ho scritto nel commento che ho dovuto fare un ulteriore cambiamento.Nella forma:

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

Nell'azione chiamato dal modulo:

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

Nota il "params[:todo_ids].i tasti" alla fine, che era una soluzione per affrontare lo strano modo in cui i parametri sono stati formattati:

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

Altri suggerimenti

<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> o quello che volete l'id sia.

considero questo un bug con check_box_tag causata dalla natura apparentemente hacker di dare manualmente le todo_ids nome [] e il codice del metodo chiamante sanitize_to_id (nome). Ho appena incontrato ieri e sto contemplando una patch.

Si può provare questo e farci sapere se funziona:

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

Questo è il comportamento previsto di check_box_tag, come questo commento su una correzione respinto spiega .

È possibile utilizzare collection_check_boxes come questo ( Haml la sintassi, sorry):

# 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

Naturalmente è possibile utilizzare parziali all'interno del blocco, basta passare e utilizzare il generatore interno.

Controlla più opzioni nel .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top