rails:避免在路由参数中转义字符串

时间:2012-01-31 18:18:42

标签: ruby-on-rails escaping routes ruby-on-rails-2

我有一个像这样定义的路线

map.search_by_key '/search/:search_key', :controller => 'my_controller', :action => 'my_action'

使用参数:search_key,使得网址如下:

mysite.com/search/c_vehicles/c_cars/mk_suzuki

其中search_key为“c_vehicles / c_cars / mk_suzuki”..

问题是..使用命名路由创建此URL时 search_by_key_path("c_vehicles/c_cars/mk_suzuki")它会转义字符串..并创建类似于:

的内容
mysite.com/search/c_vehicles%2Fc_cars%2Fmk_suzuki

这种方法很好但在地址栏中看起来很丑..我该如何避免这种情况..

我正在使用带有红宝石1.8.6的rails 2.2.2(古代我知道......正在升级过程中)..

想法?

1 个答案:

答案 0 :(得分:1)

您可以使用globbed route进行此操作,并在控制器中使用一些字符串争用:

  

Route globbing是一种指定特定参数应与路径的所有剩余部分匹配的方法。例如

map.connect 'photo/*other', :controller => 'photos', :action => 'unknown'
     

此路线同样匹配photo/12/photo/long/path/to/12,创建一系列路径段作为params[:other]的值。

您的路线应如下所示:

map.search_by_key '/search/*search_key', :controller => 'my_controller', :action => 'my_action'
#--------------------------^ Change the colon to an asterisk

然后在你的控制器中:

def my_action
    search_for = params[:search_key].join('/')
    # ...
end

同样的globbing technique同样适用于Rails-3,因此升级应用程序的这一部分应该是一个简单的事情,切换到新的routes.rb方法。

这适用于2.3.8,但我不确定2.2.2。