反向铁路路由:从URL中查找操作名称

我理解如何将:controller:action, :etc转换为URL。 我正在寻找反过来,如何从URL找到rails路由器将调用的操作?

其他人可能有更短的方法来做到这一点,但如果你只是评估一个URL,那么你去ActionController::Routing::RouteSet

对于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

希望这可以帮助!

使用Rails 3,您可以:

 Rails.application.routes.recognize_path('/areas/1') => {:controller=>"areas", :action=>"show", :id=>"1"}