Мога ли да направя правило за пренасочване на всички в моите маршрути?

Възможно ли е да направя правило за пренасочване „улавяне на всички“ в моите маршрути, например нещо подобно:

get "/foo*", to: redirect("/bar$1")

Което ще доведе до тези 301:

  • /foo -> /bar
  • /foo/baz -> /bar/baz
  • /foo/?a=b -> /bar/?a=b

person John Bachir    schedule 20.06.2014    source източник


Отговори (1)


Да, можеш. Ето как съм правил това преди:

# config/routes.rb    

def get_params_blob_if_present(params)
  "/#{params[:a]}" if params[:a].present?
end

def get_query_string_params_if_present(params, options = {})
  params = params.except(:a) # Don't include blob params
  "?#{params.to_query}" if params.any?
end

MyApp::Application.routes.draw do
  # ...

  get '/foo(/*a)', to: redirect { |params, request| "/foo#{get_params_blob_if_present(params)}#{get_query_string_params_if_present(request.params)}" }

  # ...
end

По принцип (/*a) създава петно ​​с име a. След това можете условно да включите параметрите от този петно ​​в URL адреса за пренасочване, ако има такива. По същия начин можете условно да включите параметри на низ на заявка в URL адреса за пренасочване, ако има такива.

person pdobb    schedule 20.06.2014
comment
добре, значи няма официален начин. благодаря, че сподели решението си! - person John Bachir; 20.06.2014