Rails Rails 路由的问题

hiveer · 2014年05月13日 · 最后由 hiveer 回复于 2014年05月13日 · 1743 次阅读

先定义了这么一个路由

get 'orders/pay', to: 'orders#pay'

然后在控制器中定义如下 action

class OrdersController < ApplicationController
  def pay  
  end
...

当这段代码遇到了这个请求出现了如下错误

Started GET "/orders/pay?id=13" for 192.168.1.105 at 2014-05-13 12:11:33 +0800
Processing by OrdersController#show as HTML
  Parameters: {"id"=>"pay"}

请各位大牛指点

显示的信息,没错误啊。

#1 楼 @Rei 但是希望的是他到 pay 这个 action 下面来,然后参数是这样 Parameters: {"id"=>"13"}

他是到 pay 这个 action 下面啊。

你是不是要 member 路由?

#3 楼 @Rei

Started GET "/orders/pay?id=13" for 192.168.1.105 at 2014-05-13 12:11:33 +0800
Processing by OrdersController#show as HTML
  Parameters: {"id"=>"pay"}

从这个 log 来看,路由解析的结果是到了 Orders 控制器的 show 方法下面,但是我的初衷是想要他解析到 pay 方法下面的。

get 路由和 resources :orders 路由换一下顺序。

不过我认为你需要的是 member 路由。

#5 楼 @Rei 嗯,你的建议是对的。我其实很想知道为什么它会被解析到 show 方法下面去,因为在我看来它本来是跟 show 没有任何关联的。

#6 楼 @hiveer show 相当于 get 'orders/:id', to: 'orders#show',路由是一条条匹配,中了就终止。

#7 楼 @Rei 按照结果来逆推的话,他把路径中的‘pay'当成了是 id 了,这也可以吗?

#8 楼 @hiveer 可以,默认 :id 没有加模式匹配。

#9 楼 @Rei 嗯,受教了,Thank you, Rei !

需要 登录 后方可回复, 如果你还没有账号请 注册新账号