1

これはかなり基本的な質問ですが、具体的な回答をオンラインで見つけることができませんでした。ネストhas_many belongs_toされたルートは必要ありませんか? フォームの URL を探しているときにのみ、ネストされたルートを使用する必要がありますclass/:id/class/:idか?

たとえば、 と の 2 つのクラスがあるProfileとしPostます。

モデル/プロフィール

has_many :posts

モデル/ポスト

belongs_to :profile

個別のpostURL はありません。postsに表示されprofiles/showます。postルート (この場合、:new、:create、:destroy などのアクションのみ) を:profilesリソース内にネストする必要がありますか? Rails ガイドには、リソースを 1 レベル以上の深さで入れ子にするべきではないと記載されており、多くの場合、そうです。すべての関連付けに対してネストされたリソースを作成すると、このルールにすぐに違反するように思えます。前もって感謝します!

4

2 に答える 2

3

ネストされたルートを使用しない場合、/profile/1/postsまたは/profile/1/posts/1必要ない場合。ただし、再考することをお勧めします。ネストされたルートはクリーンな RESTful API を実現します

たとえば、すてきなネストされたルートは次のとおりです。

resources :profile, :shallow => true do
  resources :posts
end

これらすべての本当に便利なルートを提供します:

   profile_posts GET /profile/:profile_id/posts(.:format) posts#index
                 POST /profile/:profile_id/posts(.:format) posts#create
new_profile_post GET /profile/:profile_id/posts/new(.:format) posts#new
       edit_post GET /posts/:id/edit(.:format) 投稿#edit
            post GET /posts/:id(.:format) posts#show
                 PUT /posts/:id(.:format) posts#update
                 /posts/:id(.:format) の削除 #posts#destroy
   profile_index GET /profile(.:format) profile#index
                 POST /profile(.:format) profile#create
     new_profile GET /profile/new(.:format) profile#new
    edit_profile GET /profile/:id/edit(.:format) profile#edit
         profile GET /profile/:id(.:format) profile#show
                 PUT /profile/:id(.:format) profile#update
                 削除 /profile/:id(.:format) profile#destroy

このようにして、必要/有用なときにネストされたルートを自由に選択する必要があります。

GET /profile/:profile_id/posts/new(.:format) # create a new post for the given profile_id
GET /profile/:profile_id/posts(.:format) # return all posts for the given profile_id

ネストされたルートが必要ない浅いルートを使用します

于 2013-04-15T22:13:18.667 に答える
1

Ruby on Rails ガイドのセクション 2.7 を読むと、次のように述べられています。

ネストされたルートを使用すると、ルーティングでこの関係をキャプチャできます。

http://guides.rubyonrails.org/routing.html#resource-routing-the-rails-defaultを参照してください。

さらに、クラスに対して特定の操作を実行したい場合があります。つまり、などuserがあります。すべてのユーザーが特定の予約に関連付けられています。つまり、ユーザーに何かをするときはいつでも、実際にはユーザー/予約に対して何かをしているということです。これはこれと関連しているからです。createedit

RESTful ルートは、アプリケーションを設定し、統合されたリソース識別子を有効に活用するためのクリーンな方法です。この例は、/users/1/bookings/3 などの特定のユーザーを識別することで、これは最初のユーザーを示します。

于 2013-04-16T02:45:04.600 に答える