рельсы: избегайте экранирования строки в параметрах маршрута - PullRequest
0 голосов
/ 31 января 2012

у меня определен маршрут, подобный этому

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

параметр :search_key используется таким образом, что URL-адреса выглядят так:

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

это работает нормальноно выглядит ужасно в адресной строке ... как мне этого избежать ..

Я использую рельсы 2.2.2 с ruby ​​1.8.6 (древний, я знаю .. в процессе обновления) ..

идей?

1 Ответ

1 голос
/ 31 января 2012

Вы можете использовать глобальный маршрут для этого и небольшую последовательность строк в вашем контроллере:

Маршрутизация - это способ указать, что конкретный параметр должен соответствоватьна все остальные части маршрута.Например,

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

Та же самая техника глобализации одинаково хорошо применяется в Rails-3, поэтому обновление этой частивашего приложения должно быть простым делом, переключаясь на новые routes.rb методы.

Это работает с 2.3.8, хотя я не уверен насчет 2.2.2, хотя.

...