8

私のroutes.rbには次のものがあります:

  resources :aquariums do
    resources :management_roles
    resources :graphs
    resources :animals
  end
  get 'aquarium', to: 'aquariums#show', :as => :aquarium

最後の取得の理由は、アプリに「現在の水族館」という概念があるためです。たとえば、 current_aquarium が 1 に設定されている場合、コントローラーの「表示」アクションで「/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

前もって感謝します!

グレッグ

4

1 に答える 1

7

最後のルートを次から変更します。

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

上記の変更を行うと、呼び出しへのリンクを作成すると、その2番目のルートは一致しません...現在、2番目のルートは一致しており、ルートが言うように、引数を:formatとして使用しています。

この変更を行う場合、意図的に「current_aquarium」にリンクしている場合は、いくつか調整が必要になる場合があります。

于 2013-01-05T18:45:48.553 に答える