发送多个自定义参数的路由

时间:2013-12-27 17:29:37

标签: ruby-on-rails ruby routes

我正在使用AngularJS,由于某种原因,我通过某个网址发送数据root_app/tasks?param1=$param1&param2=$param2

我在route.rb文件中写了这个

  resources :tasks, :defaults => {:format => "json"}
  match "tasks/param1=:param1&param2=:param2" => "tasks#update", via: :put
  match "tasks/param1=:param1&param2=:param2" => "tasks#destroy", via: :delete

但是当我通过AngularJS发送数据时,我收到了此消息

DELETE http://localhost:3000/tasks?param1=1&param2=0 404 (Not Found) 

为什么会这样?

2 个答案:

答案 0 :(得分:3)

你不需要匹配url中的params只需写

match "/tasks" => "tasks#destroy", via: :delete

答案 1 :(得分:1)

这是因为在确定路由时,rails会忽略URL字符串的“参数”部分(?之后的任何内容)。只考虑路径(?之前的所有内容)。

但是,URL参数中的所有内容都将位于控制器的params哈希值中 - 您可以在此处进行分支。如果您只是params[:param1]

,那么在您的控制器操作中,您将拥有params[:param2]match "tasks" => "tasks#destroy", via: :delete

如果您想通过路由执行此操作,而不是http://localhost:3000/tasks?param1=1&param2=0执行http://localhost:3000/tasks/param1/1/param2/0并使用路由match "tasks/param1/:param1/param2/:param2"