如何发送整数值数组到Rails 3销毁方法



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

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

In my controller

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

我得到这样一个错误,

ActionController::RoutingError (No route matches [DELETE] "/users"):

显示路由错误…如何解决这个问题……

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

更好的解决方案是添加一个单独的路由。如果你想重用destroy操作,你可以使用这种方法(id必须是整数)

<<p> 视图/strong>

删除单个用户

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

现在你的destroy动作可以处理单个/多个id了

您给出的链接并没有说您可以将数组传递给默认的DELETE路由。它只说你可以在ActiveRecord对象的关系或数组上调用.delete_all

现在,这不起作用的原因是您只有resources :user提供的默认路由。当然,这包括一条DELETE路由。它是DELETE /users/:id。我不知道你是否可以传递一个数组作为:id,但你当然不能传递任何东西作为:ids,因为你试图这样做-这将不匹配的路由。

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

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

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

相关内容

  • 没有找到相关文章

最新更新