将复选框值传递给rails中的delete方法

时间:2015-11-19 12:26:50

标签: ruby-on-rails

我有一个用户对象列表,

<% @users.each do |user| %>
          <tr>
            <td><%= check_box_tag 'ids[]', user.id, false, :class => 'table-row-checkbox' %></td>
            <td>
              <%= link_to user.email, edit_user_path(user)  %>
            </td>
          </tr>
        <% end %>

我想创建一个链接删除并删除所有已检查的用户。

    <%= link_to 'Delete', delete_user_path, method: :delete, data: { confirm: 'Are you sure?' }, class: "btn btn-danger" %>

如何将所有选中的复选框传递给destroy方法?

1 个答案:

答案 0 :(得分:0)

您可以将复选框放在以下格式中:

<%= form_tag(delete_user_path,:id => 'form_id',) do %>
    <% @users.each do |user| %>
          <tr>
            <td><%= check_box_tag 'ids[]', user.id, false, :class => 'table-row-checkbox' %></td>
            <td>
              <%= link_to user.email, edit_user_path(user)  %>
            </td>
          </tr>
        <% end %>
     <%= submit_tag("Delete") %>
<% end %>

当按下提交按钮时,您将获得传递给控制器​​的参数中的ID:

"ids"=>["1", "2", "3"]

如果您不想提交按钮,那么您需要使用javascript / jquery:

<%= link_to 'submit', "#", :onclick => "$('#form_id').submit()" %>

现在你在控制器上的动作看起来像这样:

def delete
  if request.post?
    delete_ids = params[:ids].collect {|id| id.to_i} if params[:ids]

    delete_ids.each do |id|
       User.find(id).destroy
    end

  end
end