こんにちは!kossyです!
本日の気になるニュースはこちら
jp.wsj.com
このメーカーが支払うライセンス料は消費者に跳ね返ってきますよねおそらく。。。
とはいえ、iphoneはandroidの端末と比べると価格が高いので、
今すぐに市場が激変する、ところまではいかないような気もしています。
とはいえ、こちらの記事によると、欧州地域のOSシェアは軒並みAndroidがiOSを上回っているため、
中長期的には市場に与えるインパクトは大きそうです。
www.globalmarketingchannel.com
新しいOSを提供する会社にはチャンスなのではないでしょうか。
さて、今回は、リソースの関係性を一意に特定できる際に、
不必要なURLを短くできるRailsのルーティングのオプションである、
shallowオプションの使い方について、ブログに残してみたいと思います。
環境
Rails 5.1.6
Ruby 2.5.1
MacOS
URL長くなる問題
ルーティングを記述する際に用いるresourcesメソッドのネストは
リソース同士の関係を表すにはとても便利ですが、場合によっては
URLが長くなってしまうという問題も発生します。
例えば、
routes.rb resources :reviews, except: [:index] do resources :likes, only: [:create, :destroy] end end
上記のようなルーティング設計の時に生成される
likesのcreateアクションとdestroyアクションのルーティングは、
$ rails routes 省略 review_likes POST /reviews/:review_id/likes(.:format) likes#create review_like DELETE /reviews/:review_id/likes/:id(.:format) likes#destroy
となります。
likesのidがレビューのidに依らず一意であるならば、
/likes/:id(:format)
でもいいはずです。
そこで、shallowの登場
そういったケースで、生成されるURLを
短くできるのが、shallowオプションです。
routes.rb resources :reviews, except: [:index] do resources :likes, only: [:create, :destroy], shallow: true end end
とすると、
$ rails routes 省略 review_likes POST /reviews/:review_id/likes(.:format) likes#create like DELETE /likes/:id(.:format) likes#destroy
と書いた通りの理想的なURLが生成されています。
likesのidがレビューのidに依らず一意であるならば、/likes/:id(:format)でもいいはずです。
また、prefixの構文も少し短くできています。
今回の例ではあまりメリットを感じられないかもしれませんが、
アプリケーションが肥大化してきた際には、可読性の向上、記述するコード量の減少等が
shallow: trueを使うことで実現できると思います。
参考にさせていただいた記事
resources を nest するときは shallow を使うと幸せになれる - Qiita
Rails のルーティング | Rails ガイド