rails - url_for在使用命名空间时表现不同(基于使用的当前控制器)

use*_*745 9 ruby-on-rails

假设命名空间是"abc",我们有一个控制器"abcs",另一个使用命名空间"abc"的是"defs".

为了便于理解:

AbcsController
Abc::DefsController 
Run Code Online (Sandbox Code Playgroud)

当当前流程进入时AbcsController,url_for({:controller => "abcs", :action => :new})正在返回正确的url但是当流程进入Abc::DefsController时,我正在给出:

url_for({:controller => "abcs", :action => :new })
Run Code Online (Sandbox Code Playgroud)

它将其视为:

url_for({:controller => "abc/abcs", :action => :new})  #Observe abc/abcs
Run Code Online (Sandbox Code Playgroud)

所以,这里它应该是"abcs"而不是"abc/abcs",但它正是这样对待的.

什么是解决方案?请向我询问更多信息.

nzi*_*nab 8

从这里:http: //guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

最后一个备注框如下:

如果需要在命名空间块中使用不同的控制器命名空间,则可以指定绝对控制器路径,例如:get'/ foo'=>'/ foo #index'.

这意味着你所要做的就是:

url_for({:controller => "/abcs", :action => :new })
Run Code Online (Sandbox Code Playgroud)

我也遇到了这个问题,这解决了它:)


Gra*_*ett 5

url_for 也可以将数组作为参数,你可能正在寻找类似的东西:

url_for([:edit, :admin, @product])

其中,admin符号将是你的命名空间.