/ / Las rutas de Rails interpolan parámetros opcionales en la redirección - ruby-on-rails

Las rutas de los rieles interpolan parámetros opcionales en la redirección - ruby-on-rails

Tengo un enlace de redireccionamiento en mis rutas de la siguiente manera.

match "(:locale)/products", to: redirect("%{locale}/products/new", status: 301),  via: "get"

Aquí param :locale es opcional.

Entonces, en caso de que param :locale está vacío, recibo un mensaje de error:

key{locale} not found

Una posible solución sería usar block en la redirección en su lugar, donde puedo agregar lógica personalizada, p.

match "(:locale)/products", to: redirect{ |params|"#{params[:locale]}/products/new"}, status: 301,  via: "get"

Pero, ¿hay alguna forma de interpolar parámetros opcionales en la forma más corta sin usar bloques?

Respuestas

3 para la respuesta № 1

Lo he intentado con mi modelo de usuario. Parecía

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

Primero, no recibí un error cuando: faltaba la configuración regional porque antes había "recursos" y, en segundo lugar, puede establecer una restricción para garantizar que el parámetro esté allí.

¿Esto ayuda?

ACTUALIZAR

get "(:locale)/users" => redirect( "/users?locale=%{locale}", :status => 301 ), :defaults => { :locale => "de" }

También existe la posibilidad de establecer un valor predeterminado.