0

我正在使用以下路线:

  match ':controller(/:action(/:id))', :constraints => {:id => /.*/, :controller => /[a-z]$/}
  match ':controller', :to => :index, :constraints => {:controller => /[a-z]/}
  get ':id' => 'user#show', :constraints => {:id => /.+/}

当我运行 rake show routes 时:

 /:controller(/:action(/:id))(.:format) {:id=>/.*/}
 /:controller(.:format) :controller#index
 GET /:id(.:format)         user#show {:id=>/.+/}

:controller 的约束未显示。

我的目标是请求“M. Bovary”路由到 '/user/show/', :id => 'M. 包法利”。目前它正在路由到 Mcontroller#index,根本没有传递任何 id。"/m" => "MController#index"

在我看来,rails 匹配约束的第一部分,然后“丢弃”其余的参数。约束似乎忽略了 ^ 或 $ 或 \Z,所以这不是一个选项。

4

1 回答 1

0

Frederick Cheung 在上面的评论中得到了答案,但他不会在这里添加,所以我要结束这个老问题。

由于网址有一个“。” 在其中,rails 很困惑这是一个扩展。通过指定格式来帮助它:

match ':controller(/:action(/:id))', :constraints => {:id => /.*/,
 :controller => /[a-z]$/, :format => /(html|js)/}
于 2013-08-27T04:43:46.087 回答