我正在使用以下路线:
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,所以这不是一个选项。