Как мне установить уникальный идентификатор для флажков в форме нескольких записей Rails? - PullRequest
2 голосов
/ 14 июня 2009

Я установил форму Rails, примерно следуя инструкциям в this Railscast.

Вот код для формы:

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

А вот код для частичной задачи:

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

Работает отлично, но я хочу начать реализацию AJAX, и мне нужно, чтобы каждый флажок имел уникальный идентификатор. Прямо сейчас сгенерированные теги ввода выглядят примерно так:

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

Каждый флажок имеет одинаковый идентификатор ("todo_ids_"), что является проблемой. Я подозреваю, что решение очень простое, но я его не вижу. Любые советы?

Ответы [ 4 ]

7 голосов
/ 14 июня 2009

<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%> или как вы хотите, чтобы идентификатор был.

Я считаю, что это ошибка с check_box_tag, вызванная, казалось бы, хакерской природой ручного присвоения ему имени todo_ids [] и кода метода, вызывающего sanitize_to_id (name). Я только вчера столкнулся с этим, и я обдумываю патч.

2 голосов
/ 14 июня 2009

В итоге я использовал решение, похожее на решение Райана, но, как я уже писал в комментарии, мне пришлось внести дополнительные изменения. В форме:

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

В действии, называемом формой:

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

Обратите внимание на «params [: todo_ids] .keys» в конце, что было обходным решением для странного способа форматирования параметров:

"todo_ids" => {"5"=>"5"}
1 голос
/ 18 сентября 2016

Это ожидаемое поведение check_box_tag, так как этот комментарий к отклоненному исправлению объясняет .

Вы можете использовать collection_check_boxes следующим образом ( haml синтаксис, извините):

# 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

Конечно, вы можете использовать партиалы внутри блока, просто передайте и используйте компоновщик внутри.

Проверьте дополнительные параметры в API документах .

1 голос
/ 14 июня 2009

Можете ли вы попробовать это и дайте нам знать, если это работает:

check_box_tag "todo_ids[#{todo.id}]", todo.id %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...