shallow: true オプション

ルーティングファイル内でshallow: trueオプションを見かけることはあったのですが、何者なのかよく分かっていなかったので調べました!

 

 

shallow: true オプションとは

ネストしたパスを作る際にshallow: trueオプションを付けることで、

show/edit/update/destroyのように親レコードのidが無くても実行できるアクションはネストしないパスを生成してくれます!

index/new/createのように親レコードのidが分からないと実行できないアクションはネストしたパスを生成してくれます。

 

 

使ってみる
  • shallow: tureをつけない
resources :reviews do
  resources :comments
end

Prefix Verb   URI Pattern                 Controller#Action

    reviews GET    /reviews(.:format)          reviews#index

            POST   /reviews(.:format)          reviews#create

new_review GET    /reviews/new(.:format)      reviews#new

edit_review GET    /reviews/:id/edit(.:format) reviews#edit

     review GET    /reviews/:id(.:format)      reviews#show

            PATCH  /reviews/:id(.:format)      reviews#update

            PUT    /reviews/:id(.:format)      reviews#update

            DELETE /reviews/:id(.:format)      reviews#destroy

review_comments GET    /reviews/:review_id/comments(.:format)          comments#index

                    POST   /reviews/:review_id/comments(.:format)          comments#create

new_review_comment GET    /reviews/:review_id/comments/new(.:format)      comments#new

edit_review_comment GET    /reviews/:review_id/comments/:id/edit(.:format) comments#edit

     review_comment GET    /reviews/:review_id/comments/:id(.:format)      comments#show

                    PATCH  /reviews/:review_id/comments/:id(.:format)      comments#update

                    PUT    /reviews/:review_id/comments/:id(.:format)      comments#update

                    DELETE /reviews/:review_id/comments/:id(.:format)      comments#destroy

 

  • shallow: tureつける 
resources :reviewsshallow: true do
  resources :comments
end

 

Prefix Verb   URI Pattern                 Controller#Action

    reviews GET    /reviews(.:format)          reviews#index

            POST   /reviews(.:format)          reviews#create

new_review GET    /reviews/new(.:format)      reviews#new

edit_review GET    /reviews/:id/edit(.:format) reviews#edit

     review GET    /reviews/:id(.:format)      reviews#show

            PATCH  /reviews/:id(.:format)      reviews#update

            PUT    /reviews/:id(.:format)      reviews#update

            DELETE /reviews/:id(.:format)      reviews#destroy

review_comments GET    /reviews/:review_id/comments(.:format)     comments#index

                   POST   /reviews/:review_id/comments(.:format)     comments#create

new_review_comment GET    /reviews/:review_id/comments/new(.:format) comments#new

      edit_comment GET    /comments/:id/edit(.:format)               comments#edit

           comment GET    /comments/:id(.:format)                    comments#show

                   PATCH  /comments/:id(.:format)                    comments#update

                   PUT    /comments/:id(.:format)                    comments#update

                   DELETE /comments/:id(.:format)                    comments#destroy

 

 

感想その他

ルーティングをネストさせ、パスで親レコードのidを渡すこともあれば、別の方法で渡すこともあるので、よい使い分けについても今度考えてみたいです。