我有一个像这样定义的路线
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(古代我知道......正在升级过程中)..
想法?
答案 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。