Ruby on Rails: Get the controller and action name based on a path

please delete me picture please delete me · Aug 11, 2010 · Viewed 14k times · Source

I am trying to get the controller and action name based on a path. I have a route:

map.resources :permissions

I thought that I could use:

ActionController::Routing::Routes.recognize_path "/permissions/1"

To get a hash like:

{ :controller => "permissions", :action => "show" }

The actual hash that comes back is:

{ :controller => "permissions", :action => "1" }

How do I get the correct action name instead of just my passed in ID? The dispatcher must be able to get at it somehow or Rails wouldn't work, but I am having trouble locating how it is accomplished.

Answer

Fred Willmore picture Fred Willmore · Mar 9, 2016

As of Rails 4 the method to recognize the path is now Rails.application.routes.recognize_path as opposed to ActionController::Routing::Routes.recognize_path and it returns a hash of controller, action, and id like so:

Rails.application.routes.recognize_path(app.edit_somecontroller_path(1))
 => {:controller=>"somecontroller", :action=>"edit", :id=>"1"}