久々の Rails ネタ。
『root 直下にユーザー名がくるような URL』を設計したいときがたまにある。 例えばこんなやつ。
https://localhost:3000/<ユーザー名>/issues
この URL を実現するには、routes.rb で scope を使って、次のようにルーティングを記述すればいい。
scope "/:username" do get "/" => "home#index" resources :issues end
ルーティングを確認してみると
Prefix Verb URI Pattern Controller#Action GET /:username(.:format) home#index issues GET /:username/issues(.:format) issues#index POST /:username/issues(.:format) issues#create new_issue GET /:username/issues/new(.:format) issues#new edit_issue GET /:username/issues/:id/edit(.:format) issues#edit issue GET /:username/issues/:id(.:format) issues#show PATCH /:username/issues/:id(.:format) issues#update PUT /:username/issues/:id(.:format) issues#update DELETE /:username/issues/:id(.:format) issues#destroy
期待通り。
ユーザ名はコントローラーの params から取得できる。
class HomeController < ApplicationController def index @username = params[:username] end end
Rails のルーティングは奥が深いね。