次のような URL を作成しているサイトがあります (ユーザーが情報を表示できるようにするため)。
/:state/:data_type/:category/:subcategory/:item_id
data_type は、「ディレクトリ」、「記事」、または「ドキュメント」のいずれかです。アイデアは、カテゴリとサブカテゴリに基づいて各状態の情報を保存し、そのように表示できるようにすることです。
その特定の部分は有効なパスです。例えば:
/IN - インディアナ州のホームページを表示 (コントローラー region_home、アクション インデックス)
/IN/directory - インディアナ州のカテゴリとサブカテゴリのリスト (コントローラー region_categories)
/IN/directory/schools - インディアナ州の「学校」カテゴリの下のサブカテゴリのリスト (コントローラーは region_subcategories です)
/IN/directory/schools/elementary - インディアナ州の小学校のリスト (コントローラーは region_directory、アクション インデックス)
/IN/directory/schools/elementary/10-meridian-street - 特定の学校にドリルダウン (コントローラーは region_directory、アクションは show)
これは主に情報を表示するためのものです。私はすでに、すべての地域、カテゴリ、サブカテゴリなどに対して「スラッグ」を作成しています。その部分は機能します。
私は実際に次のように動作させることができます:
match ':region_slug/directory(/:category_slug(/:subcategory_slug(/:directory_entry_id)))' => 'region_directory#index', :as => :region_directory
問題は、すべてのリクエストが同じコントローラー/アクションに送信され、リクエストをディスパッチする必要があることです。
私はそれを細かく切ることができます:
match ':region_slug' => 'region_home#index'
match ':region_slug/directory' => 'region_categories#index'
match ':region_slug/directory/:category_slug' => 'region_subcategories#index'
match ':region_slug/directory/:category_slug/:subcategory_slug' => 'region_directory#index'
match ':region_slug/directory/:category_slug/:subcategory_slug/:directory_entry_id' => 'region_directory#show'
しかし、それはDRYを破り、記事などでそれを繰り返さなければなりません。スコープでこれを行う方法がわかりません。何か案は?