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

时间:2010-08-14 02:10:32

标签: ruby-on-rails routing

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

2 个答案:

答案 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

希望这有帮助!