“资源:帖子,除了:: new”让Rails认为路由/帖子/新会指向帖子ID“新”

时间:2015-08-04 12:41:43

标签: ruby-on-rails routing

我有以下路线:

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有关吗?

1 个答案:

答案 0 :(得分:2)

我相信,如果您没有在show路线中添加约束,表示它只接受数字,那么您在posts之后放置的所有内容都会被映射为id到那条路。

这意味着,如果您尝试访问posts/something,则可能会出现ActiveRecord错误,表明找不到Post id=something

要添加约束,请像这样添加constraints

resources :success_criteria, except: :new, constraints: { id: /\d+/ }