在我的应用程序中,我有资助,我希望网址为root / grant_id,而不是root / grants / grant_id。我在我的路线中有这个
Rails.application.routes.draw do
...
root 'static_pages#welcome'
# get 'home' => 'static_pages#home'
get 'about' => 'static_pages#about'
get 'faq' => 'static_pages#faq'
get 'signup' => 'users#new'
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
delete 'logout' => 'sessions#destroy'
get 'dashboard' => 'dashboard#index'
resources :users do
resources :projects
member do
get 'access_granted'
put 'access_granted'
get 'remove_access'
put 'remove_access'
end
end
resources :profiles
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
resource :request_access, only: [:show, :new, :create]
resources :grants, :path => '' do
resources :app_types do
resources :submissions
end
end
get 'grants' => 'grants#index'
resources :matches
end
当我将resources :matches
置于resources :grants, :path => '' do
行以下时,我收到错误"无法找到Grant"我看到请求参数是
{" controller" =>" grants"," action" =>" show"," id" = >"匹配"}。当我将resources :matches
放在授权行之上时,一切正常。它几乎就像授权路线中的东西不会关闭,并迫使它下面的任何线路寻找拨款控制器。一个简单的解决方案就是将所有内容保持在该行之上,但我试图理解为什么会发生这种情况。
我也注意到,即使我将授权#index定义为授权,当我搜索路由时,我看到:
grants GET / grants#index
GET /grants(.:format) grants#index
所以有两个问题 1.是:path => ''删除授权/部分网址的正确方法 2.为什么授权路线以下的所有内容都会被发送到拨款控制器?
答案 0 :(得分:2)
来自文档:
Rails路由按照指定的顺序进行匹配,因此如果您有资源:照片上方的照片/投票'资源行的show action的路由将在get行之前匹配。要解决此问题,请将获取行移到资源行上方,以便首先匹配。
因此,您遇到的问题是将拨款与""匹配。表示您的拨款INDEX路线是/,您的拨款SHOW路线是/:grant_id,它将匹配任何路线。如果你想拥有这种路线(我建议反对),它必须位于路线文件的底部。
您可以在此处详细了解路线:http://guides.rubyonrails.org/routing.html