/ / Železničné trasy interpolovajú voliteľné parametre v presmerovaní - rubínovo-železničné

Trasy koľají interpolujú voliteľné paramety v presmerovaní - ruby ​​na koľajniciach

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ď č. 1

Skú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.