今回は、shallowメソッドが非常に便利だったのでご紹介します。
#shallowオプションとは何か?
ルーティングの記述を複雑にせず、かつ深いネストを作らないという絶妙なバランスを保つことのできるオプションです!
では、具体的にはどのようなことか?
コードを交えて見ていきましょう。
#shallowオプションの使用前
resources :posts, only: %i(index show new create destroy) do
resources :likes, only: %i(create destroy)
end
このようなroutesファイルがあったとします。
ネストしてますね。
では、このネストしているlikesのURLを確認してみます。
$rails routes -c likes
Prefix Verb URI Pattern Controller#Action
post_likes POST /posts/:post_id/likes(.:format) likes#create
post_like DELETE /posts/:post_id/likes/:id(.:format) likes#destroy
destroyアクションの/posts/:post_id/likes/:id(.:format)
って見づらいですよね?
それがshallowオプションを使えば、簡単に完結に解決します。
#shallowオプションの使用後
resources :posts, only: %i(index show new create destroy) do
resources :likes, only: %i(create destroy), shallow: true
end
では実際にshallowオプションを使用してみます。
これで、先程と同様にlikesのURLを確認してみると・・・
$ rails routes -c likes
Prefix Verb URI Pattern Controller#Action
post_likes POST /posts/:post_id/likes(.:format) likes#create
like DELETE /likes/:id(.:format) likes#destroy
/likes/:id(.:format)
に変わり、
shallowオプションを使う前のdestroyよりも、だいぶ見やすくなりましたよね!
しかもとっても簡単!
#親リソースで指定も可能
resources :articles, shallow: true do
resources :comments
resources :quotes
resources :drafts
end
上記のように親リソースに直接shallowオプションを指定することも出来ちゃいます。
この場合だと全てのネストしたリソースが浅くなるそうです!