В настоящее время я пишу приложение на 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 красивым и чистым ...