キャッチオールルートをRails 3に書き込もうとしていますが、いくつかの用語を予約したいと思います。私は、特にデビッド・バロウズの回答で、この記事に出す例を次のようだ:Dynamic routes with Rails 3Rails 3:キャッチオールルートを読みやすく、修正しやすくする
私が使用している構文は以下の通りです:
match '*path' => 'router#routing', :constraints => lambda{|req| (req.env["REQUEST_PATH"] =~ /(users|my-stuff)/).nil? }
さて、その構文はうまく動作します - 場合ユーザーはパス内の「ユーザー」または「マイ・スタッフ」のページを訪問し、キャッチオールを通過して特定の場所に移動します。ユーザーが他のURLに移動すると、ルーティングロジックに移動します。
私の質問は、可読性の詳細です。何かに対して経路を一致させる方法はありますか?他は正規表現よりですか?一致する用語の配列を提供する方法はありますか?また、全体のものとは対照的に、ルートの特定のセグメントに一致する方法はありますか?
もちろん、Railsには組み込みのルーティングがありますが、このプロジェクトでは、特定のルートではコントローラがURLに存在しないという要件があります。したがって、キャッチオールです。任意のヘルプここ
ため
おかげで以下の答えは1更新routesファイルです:
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
これは近づいていますが、リストされた「隠れたルート」をバイパスするのではなく、ロジックがルーティングコントローラにそれらを供給しようとします。もし私が強打や空を取り除いたら? matchesメソッドを呼び出すと、ロジックは予約語のために機能しますが、他のすべてのものは機能しません。申し訳ありませんが、ラムダの私の把握はかなり限られています。 –
ああ、私はあなたの質問を誤解していました、私の論理はあなたのものとまったく反対でした。ルートファイルをもう少し投稿して、キャッチオールがどのようにそこに収まるかを確認できますか? –
さて、上記の質問に現在のルートを追加しました。 –