Как выбрать несколько элементов для удаления (с помощью флажка) в Rails 6 - PullRequest
4 голосов
/ 20 сентября 2019

Я создал столбец флажков, в котором пользователи могут выбрать несколько элементов для удаления в таблице.Как то так, но только кнопка «Массовое удаление»:

enter image description here

Вот мой код:

<%= render "shared/nav_dashboard" %>
<%= render "shared/header_dashboard" %>

  <section>
        <div class="container-fluid">
          <!-- Page Header-->
          <header> 
            <h1 class="h3 display">Pages</h1>
          </header>
          <div class="row">
            <div class="col-lg-12">
              <div class="card">
                <div class="card-header">
                  <h4>List of Pages</h4>
                </div>
                <div class="card-body">
                  <div class="table-responsive">
                    <table class="table">
                      <thead>
                        <tr>
                         <th><%= link_to "Bulk Delete", page_path(page), method: :delete, data: {  confirm: "Are you sure?" }%></th>
                          <th>Id</th>
                          <th>Title</th>
                          <th>Summary</th>
                          <th>Date Created</th>
                          <th colspan="3">Action</th>
                        </tr>
                      </thead>
                      <tbody>
                      <% @pages.each do |page| %>
                        <tr>
                          <td><input type="checkbox" value="false"> </td>
                          <td scope="row"><%= page.id %></td>
                          <td><%= page.title %></td>
                          <td><%= page.body.truncate(60) %></td>
                          <td> <%= page.created_at.strftime("%B %d, %Y") %> </td>
                        <td><%= link_to "Show", page_path(page)%></td>
                         <td><%= link_to "Edit", edit_page_path(page)%></td>
                          <td><%= link_to "Delete", page_path(page), method: :delete, data: {  confirm: "Are you sure?" }%></td>
                        </tr>
                        <% end %>
                      </tbody>
                    </table>
                  </div>
                </div>
              </div>
            </div>


      </section>


<%= render "shared/footer_dashboard" %>

Мне интересно, почемуэто не работает?

Как я могу выполнить эту функцию шаг за шагом?

Ответы [ 3 ]

1 голос
/ 20 сентября 2019

если вы не предпочитаете писать другой отдельный метод, тогда вы можете попробовать, как показано ниже, вам просто нужно быть уверенным, что при выборе нескольких идентификаторов он должен отправлять как params [: ids], а не params [: id]

def destroy
  ids = params[:ids].present? ? params[:ids] : [parmas[:id]]
  Pages.where(id: ids).destroy
end
1 голос
/ 20 сентября 2019

Вы можете использовать форму.Это будет выглядеть примерно так (я использую simpleform, но это будет работать для каждого вашего предпочтительного помощника по тегам формы):

In routes.rb:

resources :pages do 
  collection do 
    delete :bulk_destroy
  end
end 

В вашемview:

<%= simple_form_for :pages, url: "/pages/bulk_destroy", method: :delete do |f| %> 
  <ul>
    <% @pages.each do |page| %>
      <li> <%= page.name %> <input type="checkbox" name="collection_ids[]" value="<%= page.id %>" /> </li>
    <% end %>
  </ul>
  <%= f.submit %>
<% end %>

В вашем контроллере:

class PagesController < ApplicationController
  def bulk_destroy
    Page.where(id: params[:collection_ids]).destroy_all
  end
end

Тяжелая работа позаботилась о вас: https://github.com/joshmn/active_action или проверьте минимальное подтверждение концепции в https://github.com/joshmn/bulk_actions_poc

0 голосов
/ 20 сентября 2019

вам может потребоваться изменить синтаксис в зависимости от версии jquery

$('#bulk_delete').on('click', function(e){
  var selectedIds = [];
  $("input[type='checkbox']:checked").each(function(e){
    ids.push($(this).data('id'))
  })
  $.ajax({url: 'your action url',type: 'DELETE', data: {ids: selectedIds}})
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...