Я работаю над созданием нового контроллера/маршрута, чтобы только позволить HTTP, ДОБИРАЮТСЯ и HTTP POST. URL должен быть к / нечто. Естественно мой маршрут похож на следующее:
map.connect 'foo',
:conditions => { :method => :get },
:controller => "foo",
:action => "display_something"
map.connect 'foo',
:conditions => { :method => :post },
:controller => "foo",
:action => "register_foo"
Часть этого, что я не понимаю, - то, что движение к http://example/foo/1 поднимает 'Неизвестное действие'. Я не хочу, чтобы/foo/N был доступен. Это должно дать пользователю 404 вместо того, чтобы бросить ActionController:: UnknownAction.
Рассмотрение ближе RouteSet возражает, что у нас есть следующее:
>> rs.recognize_path "/foo/1"
=> {:controller=>"foo", :action=>"1"}
Таким образом, это находит маршрут, и вот почему у нас нет 404.
Я должен бездельничать с method_missing в ApplicationController для броска 404 каждый раз, когда метод действия отсутствует? Я просто хочу, чтобы 404 были брошены, если нет никакого действия. В моем приложении/foo/N не имеет смысла, и я не хочу смущать пользователя.
При просмотре документации API для ActionController :: Rescue
выясняется, что ответ восстановления для ActionController :: UnknownAction
по умолчанию равен => : not_found
. Я считаю, что в производственном режиме это должно отобразить 404. Попробуйте запустить свое приложение в производственном режиме и посмотрите, как оно отреагирует (или вы должны просто увидеть код возврата HTTP в журнале.