如何防止link_to在Rails的URL参数中转义斜线?

时间:2020-03-06 14:54:03  来源:igfitidea点击:

有这条路线:

map.foo 'foo/*path', :controller => 'foo', :action => 'index'

对于link_to调用,我得到以下结果

link_to "Foo", :controller => 'foo', :path => 'bar/baz'
# <a href="/foo/bar%2Fbaz">Foo</a>

即使使用:escape => false,也直接调用url_for或者foo_url,也给我相同的URL:

foo_url(:path => 'bar/baz', :escape => false, :only_path => true)
# /foo/bar%2Fbaz

我希望得到的URL是:/ foo / bar / baz

有没有解决此问题的方法而无需修补导轨?

解决方案

与其传递路径字符串,不如给它一个数组。

link_to "Foo", :controller => 'foo', :path => %w(bar baz)
# <a href="/foo/bar/baz">Foo</a>

如果路线文件中没有该路线,则相同的link_to会创建以下内容:

# <a href="/foo?path[]=bar&path[]=baz">Foo</a>

我唯一可以找到此文件的地方在这张票中。

我们为何需要使用该路径生成URL的任何原因?

仅定义一个覆盖该URL的额外路由会更干净。