我有以下路线:
resources :success_criteria, except: :new
以下规范失败:
describe SuccessCriteriaController do
describe 'routing' do
it 'routes to #new' do
expect(get('/success_criteria/new')).to_not be_routable
end
end
end
失败消息:
Failure/Error: expect(get('/posts/new')).to_not be_routable
expected {:get=>"/posts/new"} not to be routable, but it routes to {:controller=>"posts", :action=>"show", :id=>"new"}
控制器如下所示:
class SuccessCriteriaController < InheritedResources::Base
load_and_authorize_resource
end
为什么Rails认为posts/new
会指向ID为new
的帖子?那不对,是吗?它可能与InheritedResources有关吗?
答案 0 :(得分:2)
我相信,如果您没有在show
路线中添加约束,表示它只接受数字,那么您在posts
之后放置的所有内容都会被映射为id
到那条路。
这意味着,如果您尝试访问posts/something
,则可能会出现ActiveRecord
错误,表明找不到Post
id=something
。
要添加约束,请像这样添加constraints
:
resources :success_criteria, except: :new, constraints: { id: /\d+/ }