2015-07-31 3 views
2

У меня есть простой контроллер, который должен отвечать только на действия show и index. Чтобы затянуть мои маршруты, я добавил условие только для обработки: show and: index. Проблема в том, что это заставляет действие show реагировать на pro_infos/new, где он предположительно видит «новый» как: id param.Rails 4 маршрутизации исключая: новые разрывы срабатываний rspec тесты маршрутизации

Не настоящая проблема сама по себе, но она прерывает мой тест маршрутизации rspec для новых, чтобы они не были маршрутизированы.

Из маршрутов:

resources :masters, only: [:show, :index, :new, :create] do 
    resources :pro_infos, only: [:show, :index]  
end 

От RSpec маршрутизации

it "routes to #new" do 
    expect(:get => "masters/2/pro_infos/new").not_to be_routable 
end 

rake routes |grep pro_infos возвращается:

master_pro_infos GET /masters/:master_id/pro_infos(.:format)             pro_infos#index 
master_pro_info GET /masters/:master_id/pro_infos/:id(.:format)            pro_infos#show 

Я понимаю, что я могу просто вырезать routi ng для нового действия, но для обеспечения согласованности в моем приложении я бы предпочел проверить, не маршрутизируя его маршрутизацию. Каков правильный/наилучший подход к этому?

ответ

2

Вы можете добавить ограничение (видел here) на свой маршрут, чтобы только целочисленные идентификаторы, как это:

resources :masters, only: [:show, :index, :new, :create] do 
    resources :pro_infos, only: [:show, :index], constraints: { id: /\d+/ } 
end 
+0

Что делать, если с помощью тщеславия URL-адреса, то есть '/ мастеров/1/pro_infos/тщеславие-url', где вы могли бы иметь алфавитные символы, прошедшие через значение «id»? –

Смежные вопросы