首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails通过复选框销毁多条记录

Rails通过复选框销毁多条记录
EN

Stack Overflow用户
提问于 2014-03-16 21:10:10
回答 2查看 1.5K关注 0票数 0

我的问题和他的Rails 3 destroy multiple record through check boxes很相似

它显示了这个错误

代码语言:javascript
复制
Couldn't find Ticket with id=destroy_multiple

所以我就这样修改了代码

routes.rb

代码语言:javascript
复制
 resources :tickets do
   collection do
     delete 'destroy_multiple'
   end
 end

In mod.html.erb

代码语言:javascript
复制
<%= form_tag destroy_multiple_mods_path, method: :delete do %>
  <div class="CSSTableGenerator" >
    <table >
      <tr>
        <td>Delete</td>
        <td>Edit</td>
        <td>Detail</td>
        <td>Material_Code</td>
        <td>Material_Name</td>
        <td>Material_Type</td>
        <td>Unit</td>
        <td>Storage_Lowerlimit</td>
        <td>Storage_Upperlimit</td>
        <td>Material_Unit_price</td>
        <td>Material_Balance</td>
        <td>Material_Total_value</td>
        <td>Material_Producer</td>
        <td>Material_Location</td>
      </tr>
      <% @mods.each do |mods| %>  

      <tr>
        <td><%= check_box_tag "mods_ids[]", mods.id %></td>
        <td><%= link_to "edit",  edit_mod_path(mods.id) %></td>
        <td><%= link_to 'detail', mod_path(mods.id)%></td> 
        <td><%=mods.code %></td>
        <td><%=mods.name %></td>
        <td><%=mods.version %></td>
        <td><%=mods.unit %></td>
        <td><%=mods.lowerlimit %></td>
        <td><%=mods.upperlimit %></td>
        <td><%=mods.unitprice%></td>
        <td><%=mods.totality %></td>
        <td><%=mods.totalprice %></td>
        <td><%=mods.producer %></td>
        <td><%=mods.storage %></td>
      </tr>
      <% end %>
    </table>
  </div>
  <%= submit_tag "Delete selected" %>
<% end %>

控制器

代码语言:javascript
复制
def destroy_multiple
  Mod.destroy(array_of_ids)
  respond_to do |format|
  format.html { redirect_to mods_path }
  format.json { head :no_content }
  end
end

模型

代码语言:javascript
复制
class Mod < ActiveRecord::Base
  acts_as_xlsx

  attr_accessible  :name ,:code, :lowerlimit, :producer, :storage, :totality, :totalprice,   :version, :unit, :unitprice, :upperlimit

  has_many :feedbacks, dependent: :destroy
  has_and_belongs_to_many :products

  validates :upperlimit, presence: true
  validates :lowerlimit, presence: true
  validates :name, presence: true
  validates :code, presence: true
  validates :code, presence:   true, uniqueness: { case_sensitive: false }
end


def destroy
  Mod.find(params[:mods_ids]).destroy
  flash[:success] = "Material destroyed."
  redirect_to mods_url
end

现在,当我删除多个记录时,出现了新的错误

NoMethodError in ModsController#destroy

代码语言:javascript
复制
 undefined method `destroy' for #<Array:0x2bf8678>

我接受市场的建议,这是第二个错误

代码语言:javascript
复制
Parameters:

{"utf8"=>"✓",
 "_method"=>"delete",
 "authenticity_token"=>"Z8awZYzgdGXK5eptpe1Erxow3yBGqQU9r+8j2NW4L5M=",
 "mods_ids"=>["14",
 "15"],
 "commit"=>"Delete selected",
 "id"=>"destroy_multiple"}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-16 21:26:06

你可以尝试:

代码语言:javascript
复制
def destroy_multiple
  Mod.destroy_all(id: params[:mods_ids])

  respond_to do |format|
    format.html { redirect_to mods_path }
    format.json { head :no_content }
  end
end

它类似于:

代码语言:javascript
复制
Mod.where(id: params[:mods_ids]).destroy_all

不要忘记定义正确的路由(注意:mods而不是:tickets):

代码语言:javascript
复制
resources :mods do
  collection do
    delete 'destroy_multiple'
  end
end
票数 1
EN

Stack Overflow用户

发布于 2014-03-19 13:24:21

事实表明,我的破坏方法是不必要的。当我删除它并注释route.rb中的重复资源方法时,可以解决问题。

代码语言:javascript
复制
 # resources :mods
 resources :mods do
   collection do
    delete 'destroy_multiple'
   end
 end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22443064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档