例如,我有一个表格,每行都有一个复选框。现在,我在功能中添加了能够使用内置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的唯一方法,我知道...任何想法?
答案 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 %>
请注意,这会为每种操作类型创建表单。