Rails 3でキャッチオールルートを書き込もうとしていますが、いくつかの用語を予約したいと思います。私は、この投稿で提示された例、David Burrowsによる回答:Rails3を使用した動的ルートを具体的にフォローしています。
私が使用している構文は次のとおりです。
match '*path' => 'router#routing', :constraints => lambda{|req| (req.env["REQUEST_PATH"] =~ /(users|my-stuff)/).nil? }
これで、その構文は問題なく機能します。ユーザーがパスに「user」または「my-stuff」を含むページにアクセスすると、キャッチオールを通過して特定の場所に移動します。ユーザーが他のURLにアクセスすると、ルーティングロジックに移動します。
私の質問は読みやすさに関するものです-ルートを正規表現以外のものと照合する方法はありますか?照合する用語の配列を提供する方法はありますか?また、全体ではなく、ルートの特定のセグメントを一致させる方法はありますか?
明らかに、Railsにはルーティングが組み込まれていますが、このプロジェクトには、特定のルートについて、コントローラーがURLに存在しないという要件があります。したがって、キャッチオール。
助けてくれてありがとう
以下の回答ごとに更新されたルートファイルは次のとおりです。
class RouteConstraint
RESERVED_ROUTES = ['users', 'my-stuff']
def matches?(request)
!RESERVED_ROUTES.map {|r| request.path.include?(r)}.empty?
end
end
App::Application.routes.draw do
resources :categories
resources :sites
match '*path' => 'router#routing', :constraints => RouteConstraint.new
devise_for :users, :path_names =>{ :sign_in => 'login', :sign_out => 'logout', :registration => 'register' }
root :to => "router#routing"
end