Na svojich trasách mám nasledujúci odkaz.
match "(:locale)/products", to: redirect("%{locale}/products/new", status: 301), via: "get"
Tu param :locale
je voliteľná.
Takže v prípade, keď param :locale
je prázdny, zobrazí sa mi chybová správa:
key{locale} not found
Možným riešením by bolo použiť namiesto toho blok v presmerovaní, kde môžem pridať vlastnú logiku, napr.
match "(:locale)/products", to: redirect{ |params|"#{params[:locale]}/products/new"}, status: 301, via: "get"
Existuje však nejaký spôsob, ako interpolovať voliteľné parametre v kratšej forme bez použitia blokov?
odpovede:
3 pre odpoveď č. 1Skúsil som s mojím modelom User. Vyzeralo to
Rails.application.routes.draw do
resources :users
get "(:locale)/users" => redirect( "/users?locale=%{locale}", :status => 301 )
# get "(:locale)/users" => redirect { | params | "/users?locale=#{params[:locale]}" }, :status => 301, :constraints => { :locale => /[a-z]{2,2}/i }
root "welcome#index"
end
Najprv som nedostal chybu, keď: miestne nastavenie chýbalo, pretože "zdroje" pred a za druhým ste mohli nastaviť obmedzenie, aby ste sa uistili, že parameter existuje.
pomáha to?
UPDATE
get "(:locale)/users" => redirect( "/users?locale=%{locale}", :status => 301 ), :defaults => { :locale => "de" }
K dispozícii je tiež možnosť nastaviť predvolenú hodnotu.