다중 레코드 레일 양식에서 확인란의 고유 ID를 어떻게 설정합니까?
-
13-09-2019 - |
문제
나는 대략 지침에 따라 레일 양식을 설정했습니다. 이것 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 %>
그리고 다음은 Todo 부분에 대한 코드입니다.
<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 구현을 시작하려고 노력하고 있으며 고유 한 ID를 갖기 위해서는 각 확인란이 필요합니다. 현재 생성 된 입력 태그는 다음과 같습니다.
<input id="todo_ids_" name="todo_ids[]" type="checkbox" value="7" />
모든 확인란에는 동일한 ID ( "todo_ids_")가있어 문제입니다. 솔루션이 당황스럽게 단순하다고 생각하지만 보지 못합니다. 팁이 있습니까?
해결책 2
나는 Ryan 's와 비슷한 솔루션을 사용하게되었지만 의견에 쓴 것처럼 추가 변경을해야했습니다. 의 형태의:
<%= 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"}
다른 팁
<%= check_box_tag "todo_ids[]", todo.id, false, :id => "todo_id_#{todo.id}" -%>
또는 당신이 원하는 신분증이 무엇이든.
나는 수동으로 todo_ids []라는 이름을 부여하는 겉보기에 해킹 된 특성과 sanitize_to_id (name)를 호출하는 메소드 코드로 인한 check_box_tag가있는 버그라고 생각합니다. 나는 어제 이것을 달렸고 패치를 고려하고 있습니다.
이것을 시도하고 그것이 작동하는지 알려주시겠습니까?
check_box_tag "todo_ids[#{todo.id}]", todo.id %>
이것은 예상되는 행동입니다 check_box_tag
, 처럼 거부 된 수정에 대한이 의견은 설명합니다.
당신이 사용할 수있는 collection_check_boxes
이와 같이 (햄 구문, 죄송합니다) :
# 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 문서.