我大致按照此 Railscast中的说明设置了Rails表单。
这是表格的代码:
<% 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,我需要每个复选框都有一个唯一的ID。现在,生成的输入标签看起来像这样:
<input id="todo_ids_" name="todo_ids[]" type="checkbox" value="7" />
每个复选框都有相同的ID(“ todo_ids_”),这是一个问题。我怀疑解决方案非常简单,但是我没有看到它。有小费吗?
我最终使用了类似于Ryan的解决方案,但是正如我在评论中写道,我不得不作进一步的改变。形式:
<%= 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"}