在我的routes.rb中我有:
resources :aquariums do
resources :management_roles
resources :graphs
resources :animals
end
get 'aquarium', to: 'aquariums#show', :as => :aquarium
最后获得的原因是我在我的应用程序中有“当前水族馆”的概念。如果,例如,current_aquarium设置为1,那么在我的控制器的'show'动作'/ aquarium'获得与'/ aquariums / 1'相同的渲染,代码如
@aquarium_id = params[:id] || current_aquarium.id
现在,我假设这是由于这个不同的路由,这段代码:
<%= link_to aquarium.name, aquarium %>
或
<%= link_to aquarium.name, aquarium_path(aquarium) %>
生成如下路径:
/aquarium.1
我通常期望的地方:
/aquariums/1
右?
每个请求......这是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
提前致谢!
格雷格
答案 0 :(得分:4)
更改最后一条路线:
get 'aquarium', to: 'aquariums#show', :as => :aquarium
到此:
get 'aquarium', to: 'aquariums#show', :as => :current_aquarium
问题是你必须使用同名的路线:
aquarium GET /aquariums/:id(.:format) aquariums#show
aquarium GET /aquarium(.:format) aquariums#show
如果您进行上述更改,则当您将这些链接发送到呼叫时,第二条路线将不匹配...现在,第二条路线是匹配的,就像路线所说的那样使用您的参数作为:格式。
如果你做了这个改变,如果你故意链接到'current_aquarium',你可能需要调整一些东西。