Ruby on rails url\u是否依赖于当前路径?

Ruby on rails url\u是否依赖于当前路径?,ruby-on-rails,ruby,routing,Ruby On Rails,Ruby,Routing,给定由以下命令生成的rails应用程序: rails new pets rails controller kitties index 我们将config/routes.rb更改为以下内容: RoutingIssue::Application.routes.draw do match 'pets/:pet_id/kitties', controller: 'kitties', pet_id: /.+/, action: :index end 2.1.1p76 :002 > Acti

给定由以下命令生成的rails应用程序:

rails new pets
rails controller kitties index
我们将config/routes.rb更改为以下内容:

RoutingIssue::Application.routes.draw do
  match 'pets/:pet_id/kitties', controller: 'kitties', pet_id: /.+/, action: :index 
end
2.1.1p76 :002 > ActionDispatch::Routing::RouteSet::Generator.new({pet_id: 2, controller: 'kitties', action: 'index'}, {controller: 'blubb'}, Rails.application.routes, false).generate
# => ["/pets/2/kitties", {}]
现在,在rails控制台上,我们可以看到以下内容:

RoutingIssue::Application.routes.draw do
  match 'pets/:pet_id/kitties', controller: 'kitties', pet_id: /.+/, action: :index 
end
2.1.1p76 :002 > ActionDispatch::Routing::RouteSet::Generator.new({pet_id: 2, controller: 'kitties', action: 'index'}, {controller: 'blubb'}, Rails.application.routes, false).generate
# => ["/pets/2/kitties", {}]
到目前为止还不错。解释:生成器的第一个参数是要获取url的控制器。第二个参数是映射到当前请求路径的控制器。意思是

url_for controller: 'kitties', pet_id: 2, action: 'index'
当在“blubb”控制器的路径上时,会导致控制台上显示的调用

现在谈谈实际问题:

当在指向位于命名空间*中的控制器的请求路径上执行相同的url_调用时,会发生以下情况:

2.1.1p76 :003 > ActionDispatch::Routing::RouteSet::Generator.new({pet_id: 2, controller: 'kitties', action: 'index'}, {controller: 'blubb/blobb'}, Rails.application.routes, false).generate
# ActionController::RoutingError: No route matches {:pet_id=>2, :controller=>"blubb/kitties"}
为什么?

我希望得到我的kitties控制器的正确URL,即“kitties”,而不是“blubb/kitties”,无论当前请求路径是什么。我不明白为什么不是这样。我一直在用调试器逐步调试我的应用程序,直到我在控制台上得到了上面显示的代码,这些代码被简化并成为独立的

*在config/route.rb中如下所示:


使用控制器“/kitties”的url_修复了此问题。还正确生成了指向使用routes.rb中的资源方法生成路由的控制器的链接。只有使用匹配的路由似乎会中断。另一件事:当:pet_id为nil时,也会生成正确的非相对路径。非常混乱。