経緯
マスター管理された文字列でシステムを切り分けたいことがあると思います。
例えば、Categoryモデルの名前(slugと呼ぶことにします)を用いてURLを/:slug/posts
といったものにしたい時に、これだけであれば、routes.rb
の設定は以下のもので十分です。
match '/:slug/posts', to: 'posts#index', via: 'get'
しかし、これが多くなりすぎた時は、
match '/:slug/posts', to: 'posts#index', via: :get match '/:slug/posts/:id', to: 'posts#show', via: :get match '/:slug/posts/new', to: 'posts#new', via: :get match '/:slug/posts', to: 'posts#create', via: :post match '/:slug/posts/:id', to: 'posts#destroy', via: :delete
のように冗長になってしまいます。
それを完結に書くための方法をご紹介します。
方法
以下のようにscopeでくくってやればOKです。
scope '/:slug' do resources :posts, only: [:index, :show, :new, :create, :destroy] end
あとはscope
の中に通常通りのroutingの設定を書いていけば、頭に/:slug
がついて、controller内でparams[:slug]
として呼び出すことができます。
まとめ
特にRoutingは明快でメンテナンスしやすいコードにしてやるのが得策だと思います。
コメントを残す