Rails Routing Constraints
Constraintsとは
- Railsのroutingに存在する機能
- routingに制限を設けることができる
- デフォルトで定義されている
- カスタムで制約を作成することも可能
セグメントの制限
get "books/:id" => "photos#show", constraints: { id: /[A-Z]\d{5} }
上記はconstraintsでidに制約を追加している。
/books/A12345
のようなパスにはマッチするが、 /books/12345
にはマッチしない。
リクエストに応じた制限
get "books", constraints: { subdomain: "admin" }
サブドメインにadmin
が含まれていることを制限している。
ブロックでも表現できる。
namespace :admin do constraints subdomain: 'admin' do resources :photos end end
カスタムconstraints
制約用のクラスを設けて対応する
lib/constraint以下にクラスを置く
self.matches?
メソッド内に制約を定義する
下記ではrequestを引数で取り、その中に、admin
が含まれているかどうかを判定する
module Constraint::Subdomain class Admin def self.matches?(request) request.subdomains.include?("admin") end end end
ルーティング側には下記のように定義することで制約を加える
Rails.application.routes.draw do constraints Constraint::Subdomain::Admin do get "dashboard" => "homes#dashboard" end end