Delete several records with checkbox in rails 5

0

Why does null arrive?

controller

def multiple_destroy
  Article.where(id: params[:articles]).destroy_all

  redirect_to articles_path
end

route

delete 'articles/multiple_destroy'

view

<% @articles.each do |article|%>
        <tr>
          <th>
            <input type="checkbox" value="<%= article.id %>" name="articles[]" id="article_<%= article.id %>">
            <label for="article_<%= article.id %>"></label>
          </th>
          <td><%=article.code%></td>
          <td><%=article.name%></td>
          <td><a href="/articles/<%=article.id%>" class="btn-flat waves-effect waves-light"><i class="material-icons right">keyboard_arrow_right</i>view</a></td>
        </tr>
      <%end%>
      <div class="fixed-action-btn vertical">
       <a class="btn-floating btn-large red">
         <i class="large material-icons">menu</i>
       </a>
       <ul>
         <li class="btn-floating red"><a href="#"><i class="material-icons">add</i></a></li>
         <li class="btn-floating yellow darken-1"><a rel="nofollow" data-method="get" href="<%= articles_multiple_destroy_path %>"><i class="material-icons">delete</i></a></li>
         <li class="btn-floating orange"><a class="modal-trigger" href="#modal_search"><i class="material-icons">search</i></a></li>
         <li class="btn-floating green"><a href="#!"><i class="material-icons">file_upload</i></a></li>
         <li class="btn-floating blue"><a href="#" target="_blank"><i class="material-icons">cloud_download</i></a></li>
       </ul>
      </div>
    
asked by Matias Carpintini. 06.08.2017 в 01:08
source

1 answer

0

The'articles' array arrives nil because you are not sending anything by clicking on the delete link, you are simply re-submitting to your action, but without parameters.

To achieve the behavior you are looking for (i.e. delete the checkboxes through a link), I would do the following:

app / views / articles / index.html.erb

<table id="articles">
  <% @articles.each do |article|%>
    <tr>
      <th>
        <input type="checkbox" value="<%= article.id %>" name="articles[]" id="article_<%= article.id %>">
        <label for="article_<%= article.id %>"></label>
      </th>
      <td><%=article.code%></td>
      <td><%=article.name%></td>
      <td><a href="/articles/<%=article.id%>" class="btn-flat waves-effect waves-light"><i class="material-icons right">keyboard_arrow_right</i>view</a></td>
    </tr>
  <%end%>
</table>

<div class="fixed-action-btn vertical">
  <a class="btn-floating btn-large red"><i class="large material-icons">menu</i></a>
  <ul>
    <li class="btn-floating red"><a href="#"><i class="material-icons">add</i></a></li>
    <li class="btn-floating yellow darken-1">
      <%= link_to tests_multiple_destroy_path, id: "delete" do %>
        <i class="material-icons">delete</i>
      <% end %>
    </li>
    <li class="btn-floating orange"><a class="modal-trigger" href="#modal_search"><i class="material-icons">search</i></a></li>
    <li class="btn-floating green"><a href="#!"><i class="material-icons">file_upload</i></a></li>
    <li class="btn-floating blue"><a href="#" target="_blank"><i class="material-icons">cloud_download</i></a></li>
  </ul>
</div>

<script type="text/javascript">
  $(document).ready(function() {
    $("#delete").click(function(e) {
      e.preventDefault();
      var ids = [];

      $('#posts :checked').each(function() {
        ids.push($(this).val());
      });

      window.location.href = $(this).attr("href") + "?articles=" + ids;
    });
  });
</script>
                                    
answered by 06.08.2017 / 16:36
source