在我的routes.rb中,我有:
resources :aquariums do
resources :management_roles
resources :graphs
resources :animals
end
get 'aquarium', to: 'aquariums#show', :as => :aquarium
Run Code Online (Sandbox Code Playgroud)
最后得到的原因是我的应用程序中有“当前水族馆”的概念。例如,如果current_aquarium设置为1,则在我控制器的“显示”操作中,“ / aquarium”与“ / aquariums / 1”具有相同的呈现方式,且代码如下
@aquarium_id = params[:id] || current_aquarium.id
Run Code Online (Sandbox Code Playgroud)
现在,我假设这归功于这种不同的路由,此代码:
<%= link_to aquarium.name, aquarium %>
Run Code Online (Sandbox Code Playgroud)
要么
<%= link_to aquarium.name, aquarium_path(aquarium) %>
Run Code Online (Sandbox Code Playgroud)
生成这样的路径:
/aquarium.1
Run Code Online (Sandbox Code Playgroud)
我通常期望的位置:
/aquariums/1
Run Code Online (Sandbox Code Playgroud)
对?
每个请求...产生的结果是rake routes | grep aquar
:(我假设这是最后一条弄乱了事情的路线,但我以为它将按顺序处理这些路线。而且,仅供参考,我最初在假设它可以修复,则将其移至底部)。
aquarium_management_roles GET /aquariums/:aquarium_id/management_roles(.:format) management_roles#index
POST /aquariums/:aquarium_id/management_roles(.:format) management_roles#create
new_aquarium_management_role GET /aquariums/:aquarium_id/management_roles/new(.:format) management_roles#new
edit_aquarium_management_role GET /aquariums/:aquarium_id/management_roles/:id/edit(.:format) management_roles#edit
aquarium_management_role GET /aquariums/:aquarium_id/management_roles/:id(.:format) management_roles#show
PUT /aquariums/:aquarium_id/management_roles/:id(.:format) management_roles#update
DELETE /aquariums/:aquarium_id/management_roles/:id(.:format) management_roles#destroy
aquarium_graphs GET /aquariums/:aquarium_id/graphs(.:format) graphs#index
POST /aquariums/:aquarium_id/graphs(.:format) graphs#create
new_aquarium_graph GET /aquariums/:aquarium_id/graphs/new(.:format) graphs#new
edit_aquarium_graph GET /aquariums/:aquarium_id/graphs/:id/edit(.:format) graphs#edit
aquarium_graph GET /aquariums/:aquarium_id/graphs/:id(.:format) graphs#show
PUT /aquariums/:aquarium_id/graphs/:id(.:format) graphs#update
DELETE /aquariums/:aquarium_id/graphs/:id(.:format) graphs#destroy
aquarium_animals GET /aquariums/:aquarium_id/animals(.:format) animals#index
POST /aquariums/:aquarium_id/animals(.:format) animals#create
new_aquarium_animal GET /aquariums/:aquarium_id/animals/new(.:format) animals#new
edit_aquarium_animal GET /aquariums/:aquarium_id/animals/:id/edit(.:format) animals#edit
aquarium_animal GET /aquariums/:aquarium_id/animals/:id(.:format) animals#show
PUT /aquariums/:aquarium_id/animals/:id(.:format) animals#update
DELETE /aquariums/:aquarium_id/animals/:id(.:format) animals#destroy
aquariums GET /aquariums(.:format) aquariums#index
POST /aquariums(.:format) aquariums#create
new_aquarium GET /aquariums/new(.:format) aquariums#new
edit_aquarium GET /aquariums/:id/edit(.:format) aquariums#edit
aquarium GET /aquariums/:id(.:format) aquariums#show
PUT /aquariums/:id(.:format) aquariums#update
DELETE /aquariums/:id(.:format) aquariums#destroy
aquarium GET /aquarium(.:format) aquariums#show
Run Code Online (Sandbox Code Playgroud)
提前致谢!
格雷格
从此更改最后一条路线:
get 'aquarium', to: 'aquariums#show', :as => :aquarium
Run Code Online (Sandbox Code Playgroud)
对此:
get 'aquarium', to: 'aquariums#show', :as => :current_aquarium
Run Code Online (Sandbox Code Playgroud)
问题是您必须路由名称相同的东西:
aquarium GET /aquariums/:id(.:format) aquariums#show
aquarium GET /aquarium(.:format) aquariums#show
Run Code Online (Sandbox Code Playgroud)
如果您在上面进行更改,则当您将这些链接链接到调用时,第二条路由将不匹配...就目前而言,第二条路由是匹配的,就像该路由所说的将您的参数用作:format一样。
如果您确实进行了更改,那么如果您有意链接到“ current_aquarium”,则可能需要进行一些调整。