1

我有一个 Rails 应用程序试图从数据库中销毁多个条目。我尝试过,

http://localhost:3000/users?ïds[]=1&ids[]=2

在我的控制器中

def destroy

  ids = params[:ids]
  User.where(:id => ids).destroy_all

end

我收到这样的错误,

ActionController::RoutingError (没有路由匹配 [DELETE] "/users"):

它显示路由错误..如何解决这个问题...提前谢谢..

4

3 回答 3

2

delete users/:id{.:format} => destroy路线是针对会员的,即只有一项。

您需要为此创建收集路线和自定义操作。

#routes.rb
resources :users, :collection => {:delete_all => :delete}

#users_controller.rb
def delete_all
  ids = get_ids_from_params
  User.delete_all(["id in (?)", ids])
end
于 2013-01-22T06:01:57.687 回答
0

更好的解决方案是添加单独的路线。如果您想重用销毁操作,您可以使用这种方法(id 必须基于整数)

看法

销毁单个用户

link_to(user_path(id), :method => :delete) #  user/1

销毁多个用户

link_to(user_path(ids.join("-")), :method => :delete) #  user/1-2-3

控制器

def destroy
  ids = params[:id].split("-")
  User.where(:id => ids).destroy_all
end

现在您的销毁操作将适用于单个/多个 id。

于 2013-01-22T06:18:43.023 回答
0

您提供的链接并没有说您可以将数组传递给默认的 DELETE 路由。它只是说您可以调用.delete_allActiveRecord 对象的关系或数组。

现在,这不起作用的原因是您只有resources :user. 可以肯定的是,这包括一条 DELETE 路线。是DELETE /users/:id。我不知道你是否可以传递一个数组 as :id,但你肯定不能传递任何东西 as :ids,就像你试图做的那样——这与路线不匹配。

如果您确实需要按 id 删除多个记录的操作,您可能应该在您的路由文件中添加一个自定义路由。我认为请求的正确形式应该是 ,如此处所述users/destroy_all?ids[]=1&ids[]=2并且路线可能看起来像这样:

resources :users do
  delete '/users/destroy_all/:ids' => 'users#destroy_all'
end

我还没有真正尝试过,它可能不起作用。

于 2013-01-22T06:00:24.497 回答