単純なルートを1つのURLにマッピングするための最良の方法を見つけようとしています。アプリケーションには、場所、カテゴリ、予算、会社の4つのモデルが含まれています。ただし、各モデルはこのように単一のURLにマップできます。実際の例については、 http://sortfolio.com/をチェックしてください。
/chicago <- Location
/3k-5k <- Budget
/bars <- Category
/company-name <- Company
また、次のようなものに混ぜることもできます。
/chicago/3k-5k <- Location, Budget
/chicago/bars/3k-5k <- Location, Category, Budget
/bars/3k-5k <- Category, Budget
/foo-bar <- Company
したがって、基本的にパラメータの特定の順序があります。
Location/Category/Budget
すべてのURLに一致する2つのルートがあります。
match('/').to(:controller => 'search', :action => 'index')
match('/:location(/:category(/:budget)))').to(:controller => 'search', :action => 'index')
しかし、コントローラーでは、特定の順序でアイテムをチェックする必要があるため、少し注意が必要です。会社のURLは、システムパスを上書きする可能性があるため、最後になります。
正常に動作していますが、パラメーターは完全に動的であるため、リクエストごとに多くのルックアップを行う必要があります。大したことではありませんが、そのような情報はキャッシュに保存できますが、他の解決策やアプローチがあるかどうか疑問に思っていますか?
私の頭の中には1つだけあります。それは、パスとそれがどこにつながるかに関する情報を格納するための追加のテーブルを1つ持つことです。言い換えれば、テーブルの非正規化です。
+----+----------+------------+
| ID | Url | ObjectType |
+----+----------+------------+
| 1 | chicago | location |
| 2 | bars | category |
| 3 | 3k-5k | budget |
| 4 | foo-bar | company |
+----+----------+------------+
また、URL解析プロセスは1つのカスタムクエリにまとめられている場合があります。
ご意見をお聞かせください。