Railsでroutingにconstraintsメソッドで制約を与える

こんにちは!kossyです!




さて、今回はRailsでroutingにconstraintsメソッドで制約を与える方法について、
ブログに残してみたいと思います。




環境
Ruby 2.6.3
Rails 6.0.3
MacOS Cathalina



使い方

例えば、正規表現と組み合わせて、以下のように設定できます。

config/routes.rb

get 'articles/:id', to: 'articles#show', constraints: { id: /[A-Z]\d{5}/ }

こうすることにより、/articles/A89318 のようなpath以外にはマッチできないようにすることができます。
/articles/893 のようなpathにはマッチしないということです。

また、以下のように、hostの制限を加えることもできます。

config/routes.rb


constraints host: "railsguides.jp" do
  namespace :admin, path: "" do
    resource :articles
  end
end

こうすることにより、adminの中に設定されているルーティングにホスト名による制約が付与されます。
つまり、railsguides.jp というホスト名でアクセスされた場合のみ、管理者用ページが表示されるようになります。




勉強になりました。




参考にさせていただいた記事


https://y-yagi.tumblr.com/post/92386974040/rails-routing-constraints%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6