自定义Rails 4路由包含" /"

时间:2014-05-15 06:42:38

标签: ruby-on-rails routes

我有一个方法可以生成一个随机的url结尾和一个看起来像

的get路径

/path/var1/var2

唯一的问题是,其中一些为var2生成的值中包含“/”。因此,如果var 2是“h4rd / erw”,则rails将其读为

/path/var1/h4rd/erw

/path/var1/var2/var3

rails认为这是路由的另一个参数,我不断得到错误 No route matches. 我已经考虑过将var2的生成值设置为不包含“/”s,或者可能在路径中放置通配符(如果可能的话是/ path / var1 / *)。对此最好的解决方案是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用route globbing

get '/path/var1/*var2', to: 'controller#action'

假设请求转到/path/var1/h4rd/erw。然后在控制器操作中,params[:var2]的值为h4rd/erw

答案 1 :(得分:1)

我会确保值始终被转义。

string = "my/string"
=> "my/string"
CGI.escape(string)
=> "my%2Fstring"

所以你的网址就像

/path/var1/h4rd%2Ferw

然后它将转到右侧控制器并设置正确的变量。

Rails将自动取消控制器中参数的值" params"变量,所以当你处理控制器中的值时,斜杠将返回到字符串中。

唯一剩下的问题是何时进行逃避。如果将值作为参数传递给路径助手,那么rails应该自动为它转义,如下所示:

link_to "Here", my_route_path(:foo => "bar")
相关问题