3

私は自分のウェブサイトの URL /similar-to-:product (product が動的な場合) を作成するために routes.rb を使用しようとしています。問題は、routes.rb が /:product-similar のような URL を容易にサポートするが、:product の前に区切り記号を付ける必要があるため、前者をサポートしないことです (「/」は区切り記号ですが、「-」はそうではありません)。セパレーターのリストは、ActionController::Routing::SEPARATORS にあります。

:product にはハイフンも含まれる可能性があるため、区切り記号として「-」を追加できません。このような URL をサポートする最善の方法は何ですか?

私が成功した方法の 1 つは、routes.rb を使用せず、URL 解析ロジックをコントローラー自体に配置することですが、これは最もクリーンな方法ではありません。

4

4 に答える 4

2

URL をリファクタリングして、単純に「/product に似ている」ようにします。

于 2008-09-23T17:34:53.257 に答える
1

簡単な解決策は、ルーティング フィルターを使用することです。詳細については、README を参照してください。

ルーティング フィルターを使用すると、 urlを取得して、ルーティング認識に/similar-to-:product到達する前に前処理することができます。また、生成されたパスを からに/similar-to/:product後処理することもできます。/similar-to/:product/similat-to-:product

于 2009-09-25T09:16:07.777 に答える
1

-実際、セパレーターとして追加してから、ルートグロビングを使用できます。

map.similar_product '/similar-to-*product', :controller => 'products', :action => 'similar'

次に、 ProductsController#similar で

@product = Product.find_by_slug params[:product].join('-')

リファクタリングの方が優れているように見えますが、このアプローチでは、ハイフンを含む可能性のあるすべてのスラッグを特別に処理する必要があるためです。

于 2009-09-06T08:34:46.537 に答える
0

少し混乱していますが、セパレータとして「to-」を追加していただけないでしょうか。

于 2008-09-23T12:58:21.017 に答える