0

私が通常見ているものとは異なる方法でリソースをネストできるかどうか疑問に思っていました。

通常、リソースは次のようになります。

resources :article do
  resources :comment 
end

これで URL が生成されます/article/:article_id/comment [もちろん、comment#index の場合]

ただし、次のようなものを得るためにこれを別の方法で行うことができるかどうか疑問に思っています

/article/comment   [excluding :article_id]

Article には他のすべての通常ルートがあり、コメントは最初の例と同じように動作します。/commentをcomments_controllerに接続したままにする方法はありますか、それともすべてのコメントメソッドをarticles_controllerに再配置する必要がありますか? 後で頭痛の原因になるので、避けたいと思います。

**あなたはおそらく、なぜこの文脈でこれを行う必要があるのか​​と尋ねているでしょう。真実は、私は別の文脈でそれをやっているということですが、これは説明が簡単です.

編集:

実際の目的は例とは異なります。コントローラー「employee_benefits」を通常のコントローラーにして、通常のリソースを持たせたいと考えています。ただし、/employee_benefits/new_type のようなことができるようにしたいです。福利厚生の種類は、新しい employee_benefit を作成するときにフォームに表示されるものです。/employee_benefits/edit_type[:id]、/employee_benefits/delete [正確ではありません]

名前空間が進むべき道だと思いますが、その方法が完全にはわかりません。

もっと編集:

現在、次のリソースを使用しています。

  match '/benefits/new_type' => 'company_benefits#new_type'
  match '/benefits/create_type' => 'company_benefits#create_type'
  match '/benefits/types' => 'company_benefits#types'
  match '/benefits/type' => 'company_benefits#types'

それ以外の

  resources :company_benefits, :path => '/benefits', :as => :benefits do 
    <not using this line of code>
    resources :company_benefit_types
    </not using this line of code>
  end 
4

2 に答える 2

1

名前空間の例を調べて、基本的にコメント ルートの前に「/article」を付けることができます。これにより、必要なルートが作成されます-ただし、それについて考えて、記事IDを削除することが目的であることを確認することをお勧めします.

浅いネストもうまくいくかもしれません - http://guides.rubyonrails.org/routing.html

編集:

Rails 2では、あなたが望むものは次のようになります。

resources :company_benefit_types, :path_prefix => "/benefits"

Rails 3 では、次のようになります。

scope "/benefits" do
    resources :company_benefit_types
end

実行して出力を確認し、bundle exec rake routesそれがどのように見えるかを確認します。

   company_benefit_types GET    /benefits/company_benefit_types(.:format)          company_benefit_types#index
                          POST   /benefits/company_benefit_types(.:format)          company_benefit_types#create
 new_company_benefit_type GET    /benefits/company_benefit_types/new(.:format)      company_benefit_types#new
edit_company_benefit_type GET    /benefits/company_benefit_types/:id/edit(.:format) company_benefit_types#edit
     company_benefit_type GET    /benefits/company_benefit_types/:id(.:format)      company_benefit_types#show
                          PUT    /benefits/company_benefit_types/:id(.:format)      company_benefit_types#update
                          DELETE /benefits/company_benefit_types/:id(.:format)      company_benefit_types#destroy
于 2013-08-13T20:46:35.123 に答える
-1

これはあなたを助けるはずです(複数形の「s」を除外したことに注意してください):

resource :article do
    resource :comment
end

そして、実際にそこに書いたものが生成されarticles/:article_id/commentsます。

于 2013-08-13T20:45:30.677 に答える