Rails _path帮助程序生成格式不是id的路径

Gre*_*ers 5 ruby-on-rails-3

在我的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)

提前致谢!

格雷格

Phi*_*rom 5

从此更改最后一条路线:

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”,则可能需要进行一些调整。