Маршрутизация по обратным рельсам: найти имя действия по URL - PullRequest
14 голосов
/ 14 августа 2010

Я понимаю, как превратить :controller, :action, :etc в URL. Я пытаюсь сделать наоборот, как можно найти действие, которое вызовет маршрутизатор rails, из URL?

Ответы [ 2 ]

23 голосов
/ 23 апреля 2012

С Rails 3 вы можете сделать:

Rails.application.routes.recognize_path('/areas/1')
 => {:controller=>"areas", :action=>"show", :id=>"1"} 
13 голосов
/ 14 августа 2010

у кого-то еще может быть более короткий способ сделать это, но если вы просто оцениваете URL, вы переходите к ActionController::Routing::RouteSet class

для 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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...