【问题标题】:rails: avoid string escaping in route parametersrails:避免路由参数中的字符串转义
【发布时间】:2012-01-31 18:18:41
【问题描述】:

我有这样定义的路线

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

这工作正常,但在地址栏中看起来很难看.. 我如何避免这种情况..

我正在使用带有 ruby​​ 1.8.6 的 rails 2.2.2(我知道 .. 正在升级中)..

想法?

【问题讨论】:

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


    【解决方案1】:

    您可以为此使用globbed route,并在控制器中使用一些字符串:

    路由通配是一种指定特定参数应与路由的所有其余部分匹配的方法。例如

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 2020-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 1970-01-01
      相关资源
      最近更新 更多