我了解如何将:controller
,:action,
:etc
转换为网址。我正在寻求反过来,如何从URL找到rails路由器将调用的操作?
答案 0 :(得分:23)
使用Rails 3,您可以:
Rails.application.routes.recognize_path('/areas/1')
=> {:controller=>"areas", :action=>"show", :id=>"1"}
答案 1 :(得分:13)
其他人可能有更短的方法来执行此操作,但如果您只是评估网址,那么您将转到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
希望这有帮助!