Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails 4路由排除:新操作中断rspec路由测试_Ruby On Rails_Ruby On Rails 4_Rspec_Url Routing - Fatal编程技术网

Ruby on rails Rails 4路由排除:新操作中断rspec路由测试

Ruby on rails Rails 4路由排除:新操作中断rspec路由测试,ruby-on-rails,ruby-on-rails-4,rspec,url-routing,Ruby On Rails,Ruby On Rails 4,Rspec,Url Routing,我有一个简单的控制器,应该只响应显示和索引操作。为了收紧我的路由,我添加了只处理:show和:index的条件。问题在于,这似乎迫使show操作响应pro_infos/new,它可能将“new”视为:id参数 这本身不是一个真正的问题,但它打破了我的rspec路由测试,因为新的路由不可路由 从路线: 从rspec路由 rake routes | grep pro|u信息返回: 我知道我可以为新操作取消路由测试,但为了整个应用程序的一致性,我宁愿测试不响应它的路由。正确的/最佳实践方法是什么?您可

我有一个简单的控制器,应该只响应显示和索引操作。为了收紧我的路由,我添加了只处理:show和:index的条件。问题在于,这似乎迫使show操作响应pro_infos/new,它可能将“new”视为:id参数

这本身不是一个真正的问题,但它打破了我的rspec路由测试,因为新的路由不可路由

从路线:

从rspec路由

rake routes | grep pro|u信息返回:


我知道我可以为新操作取消路由测试,但为了整个应用程序的一致性,我宁愿测试不响应它的路由。正确的/最佳实践方法是什么?

您可以在路由中添加一个约束,只允许整数ID,如下所示:

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

如果使用虚荣url,即/masters/1/pro_infos/虚荣url,您可以将字母字符作为id值传递,会怎么样?
it "routes to #new" do
  expect(:get => "masters/2/pro_infos/new").not_to be_routable
end
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
resources :masters, only: [:show, :index, :new, :create] do
  resources :pro_infos, only: [:show, :index], constraints: { id: /\d+/ }
end