0

次のような 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を破り、記事などでそれを繰り返さなければなりません。スコープでこれを行う方法がわかりません。何か案は?

4

0 に答える 0