如果您无法嵌套HTML表单,那么如何提交多个选择?

时间:2016-02-05 21:30:04

标签: javascript html ruby-on-rails ruby forms

例如,我有一个表格,每行都有一个复选框。现在,我在功能中添加了能够使用内置rails表单帮助程序删除多个选定行。问题是,我还需要能够“禁用所选”和“启用选定”行。

 <%= form_tag sccm_destroy_multiple_url , method: :delete do %>
 .... some table rows and data
 <%= check_box_tag "ID[]", group.id %>
 ... some more rows

<%= button_tag "Delete Selected", type: 'button submit', class: "btn btn-danger",data: {confirm: "Are you sure you want to delete these groups?"} do %>                          

<i class="fa fa-trash-o"></i> Delete Selected
<%end%>
<%end%>

现在我需要将另一个按钮添加到“禁用所选”但我无法执行此操作,因为它将嵌套表单和表单是存储多个复选框ID的唯一方法,我知道...任何想法?

1 个答案:

答案 0 :(得分:0)

基本上,rails通过从名称属性创建数组和嵌套哈希来解决HTML中的这种限制:

<input type="text" name="dogs[0][breed]" value="Husky">
<input type="text" name="dogs[1][breed]" value="Shiba Inu">

rails会将这些参数解释为:

"dogs" => {
  "0" => {
    "breed" => "Husky"
  },
  "1" => {
    "breed" => "Shiba Inu"
  },
}

您通常会使用fields_for,它会为您提供一个特殊的“范围”表单构建器实例:

<%= forms_for(@adaption_agency) do |k| %>
   <%= f.fields_for(:dogs) do |doggy_fields| %>
     <%= doggy_fields.text_field :breed %>
   <% end %>
<% end %>

在您的情况下,您可以创建update_multiple路由并使用包含记录数组的fields_for。

但是我会考虑使用ajax来允许用户只使用标准的CRUD操作来操作同一页面上的多个记录。它比将一切都变成大型行动要复杂得多。

<%= dogs.each do |doggy| %>
   <%= form_for(doggy), class: 'doggy-form' do |f| %>
      <%= f.text_input :breed %>
   <% end %>
   <%= button_to('Delete', dog_path(doggy), method: :delete, class: 'doggy-form') %>
<% end %>

请注意,这会为每种操作类型创建表单。