Rails RESTful маршрутизирует без проблем #new, rspec - PullRequest
0 голосов
/ 15 апреля 2010

В настоящее время я пишу приложение на Rails и обнаружил странную причуду. У меня есть контроллер PermissionsController, который на данный момент в основном предназначен для отображения. Итак, моя маршрутизация заблокирована:

map.resources :permissions, :only => [:index, :show]

К сожалению, при написании тестов один из тестов маршрутизации не проходит:

it "does not recognize #new" do
  { :get => "/permissions/new" }.should_not be_routable
end

с ошибкой:

Expected 'GET /permissions/new' to fail, but it routed to
{"action"=>"show", "id"=>"new", "controller"=>"permissions"} instead

Очевидно, что маршрут действия #show совпадает с /permissions/:id, что также дает ожидаемую ошибку Couldn't find Permission with ID=new, если вы действительно перейдете по этому URL.

Это не серьезная ошибка, так как она корректно вызывает исключение с параметром bad: id, но это некрасиво. Есть ли способ заставить Rails отклонить этот маршрут? Какой-то трюк в опциях маршрутизации, которые мне не хватает?

Полагаю, мне следует просто пропустить этот тест и проигнорировать его, или, возможно, полностью удалить идею RESTful и вернуться к более простому стилю map.connect 'permissions/:id'. Я сильно подозреваю, что буду расширять это в будущем, и вроде как хотел, чтобы мои контроллеры были совместимы друг с другом. Просто нужно добавить случайные: only or: кроме правил, которые сделали hotels.rb красивым и чистым ...

1 Ответ

1 голос
/ 16 апреля 2010

Ну, это правильно, как вы указываете. Если вы хотите, чтобы :id всегда было числом, у вас не возникло бы этой проблемы.

Это можно сделать с требованием маршрута.

map.connect ':controller/:action/:id', :requirements => { :id => /\d?/ }
map.connect ':controller/:action/:id.:format', :requirements => { :id => /\d?/ }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...