反向铁路路由:从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"}