Ruby on Rails перенаправляет, как передавать параметры в файле маршрутов

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

По сути, эти маршруты

www.hostname.com/products/bracelets/series-1/
www.hostname.com/products/bracelets/series-1/small-purple

должен направиться к

www.hostname.com/products/wristbands/series-1/
www.hostname.com/products/wristbands/series-1/small-purple

Я читаю руководство здесь http://guides.rubyonrails.org/routing.html#redirection и похоже, что я буду использовать синтаксис блока, но я все еще не уверен, как правильно выполнить маршрут. Я тоже хочу узнать больше о файле маршрутов, поэтому любая информация будет полезна. заранее спасибо

match "/bracelets/:name" => redirect {|params| "/wristbands/#{params[:name]}" }

РЕДАКТИРОВАТЬ:

Хорошо, я немного поигрался с ним, и вот как он работает с тем, что я пробовал

match "/products/bracelets/:name/:name2" => redirect {|params| "/products/wristbands/#{params[:name].pluralize}/#{params[:name2].pluralize}" }

Входной URL: localhost: 3000 / products / bracelets / series-1 / small-purple

Выходной URL: localhost: 3000 / products / wristbands
Сообщение об ошибке: Недействительный продукт: серия-1
(Таким образом, совпадение сработало, а перенаправление - нет)

Если я изменю совпадение, чтобы проверить такие параметры:

match "/products/balance-bracelets/:name/:name2" => redirect {|params| "/products/wristbands/#{params.inspect}" }

Получаю следующее:

 /products/wristbands/{:name=>"series-1", :name2=>"small-purple"}

Похоже, он не распознает вторую косую черту '/' или что-то в этом роде. Любые идеи?


person ruevaughn    schedule 16.10.2012    source источник
comment
Можете ли вы объяснить, как это работает прямо сейчас с тем, что вы пробовали?   -  person oldergod    schedule 16.10.2012
comment
Я добавил некоторые детали, спасибо, есть идеи?   -  person ruevaughn    schedule 16.10.2012


Ответы (2)


Я был в той же ситуации, и это работает для меня:

match "/products/bracelets/:name/:name2" => redirect {|params, request| "/products/wristbands/#{params[:name].pluralize}/#{params[:name2].pluralize}" }

Я передал в блок два агрумента.

person ck3g    schedule 16.10.2012
comment
Похоже, мы придумали примерно такое же решение, однако в моем случае мне не нужно было передавать запрос (я его не использовал), и удаление .pluralize для обоих name и name2 сработало для меня. - person ruevaughn; 16.10.2012
comment
это безопасно? Я собираюсь дважды проверить некоторые ссылки, чтобы выяснить, не уязвимы ли такие передаваемые значения для SQL-инъекций ... но есть ли у кого-нибудь здесь ключевое слово ссылки, которое я могу найти для двойной проверки? - person eternal44; 21.11.2019
comment
Я не думаю, что это связано. Все, что он делает, - это перенаправляет с одного URL на другой. Все вопросы безопасности, такие как SQL-инъекции, следует решать отдельно. - person ck3g; 22.11.2019

Вы можете сделать это в Rails 5.

match '/products/bracelets/:name/:name2', to: "/products/wristbands/%{name}/%{name2}"
person the_minted    schedule 28.04.2017