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 № 1Lo 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.