Я понимаю, как превратить :controller
, :action,
:etc
в URL. Я хочу сделать обратное, как можно найти действие, которое маршрутизатор маршрутизации вызовет из URL?
Обратный маршрут маршрутизации: найдите имя действия из URL-адреса
Ответ 1
у кого-то может быть более короткий способ сделать это, но если вы просто оцениваете URL-адрес, переходите к классу ActionController::Routing::RouteSet
для a config.routes.rb
map.resources :sessions
код для поиска:
ActionController::Routing::Routes.recognize_path('/sessions/new', {:method => :get})
#=> {:controller => 'sessions', :action => 'new'}
Справа:
ActionController::Routing::Routes.recognize_path('/sessions/1/edit', {:method => :get})
#=> {:controller => 'sessions', :action => 'edit', :id => 1}
Неправильно - без добавления method
он будет по умолчанию соответствовать /:controller/:action/:id
:
ActionController::Routing::Routes.recognize_path('/sessions/1/edit')
#=> {:controller => 'sessions', :action => '1', :id => 'edit'}
Если вы находитесь в действии и хотите узнать, это довольно просто, позвонив params[:action]
все, что вы когда-либо хотели узнать о маршрутах, можно найти здесь: http://caboo.se/doc//classes/ActionController/Routing/RouteSet.html#M004878
Надеюсь, это поможет!
Ответ 2
С Rails 3 вы можете сделать:
Rails.application.routes.recognize_path('/areas/1')
=> {:controller=>"areas", :action=>"show", :id=>"1"}