2012-04-20 4 views
1

の取り扱い...これはレール2.3のアプリのために、ここでのシナリオですされていますRailsのルートの衝突が、私はいくつかの問題の取り扱いを抱えている、興味深いルーティングの状況を持って

route a: 
/:trans_type/:country_code/:property_types 

route b: 
/:trans_type/:country_code/:location 

これら二つの経路が同じ場所を共有このルートでは、:locationまたは:property_typesのどちらかを設定する必要があります。

場所はかなり広いです:property_typesは、正規表現マッチを行うために既存のすべてのプロパティタイプのリストを簡単にコンパイルできるモジュールがあるため、行く方法です。

問題: /売却/私たち/アパートロフト

ので:property_typesが配列され、私はのparamsオブジェクト(明らかにルータの外、)のうち、複数のproperty_typesを解析する必要があります。このようなケースがある場合、既知のプロパティタイプに対してルーターで正規表現マッチを実行することはできません:property_typesは潜在的に複数のハイフネーションタイプを返す可能性があります。

私の質問は:property_types文字列をとり、それが:requirements matchingのために特に変更できるかどうかです。そのマッチ(/^\ w + /)のためだけに 'アパート'になるために 'apartment-loft'を置き換えることができれば、私は現実的に正規表現でマッチすることができるものを持っています。

Here's what the two routes actually look like: 

map.location ":transaction/:country_code/:property_types", 
    :controller => "search", 
    :action => "location", 
    :requirements => { :transaction => /(for-sale|for-rent|auction|new_development)/, :country_code => /\w\w/, :property_types => /(#{prop_types})/ } 

map.location ":transaction/:country_code/:location", 
    :controller => "search", 
    :action => "location", 
    :requirements => { :transaction => /(for-sale|for-rent|auction|new_development)/, :country_code => /\w\w/} 

上記の実装では、1件の物件のを持っているルートの罰金に動作しますが、複数のハイフン付きのproperty_typesを持つルートのため、私は壁に当たっています。それは可能なら

答えて

1

することは、私はこれらの2つの場合について明示的なルートやコントローラのアクションを作成することをお勧め:

map.location ":transaction/:country_code/property-types/:property_types", 
    :controller => "search", 
    :action => "by_property_type", 
    :requirements => { :transaction => /(for-sale|for-rent|auction|new_development)/, :country_code => /\w\w/, :property_types => /(#{prop_types})/ } 

map.location ":transaction/:country_code/:location", 
    :controller => "search", 
    :action => "by_location", 
    :requirements => { :transaction => /(for-sale|for-rent|auction|new_development)/, :country_code => /\w\w/} 

次に、あなたがルータに正規表現のマッチングについてはあまり心配する必要はありません、あなたはそれを行うことができますコントローラの代わりに

+0

あなたは良い点を作っています...もし私がルートグロビングを使用すると、私は同様の結果を得ることができます.../for-sale/us/apartment/loft/new-development。これは、私がいくつかの大きな内部的な変更を行う必要があり、私が従わなければならないSEOの規則に従わないだろうが、それらはおそらく変更される可能性がある。このアプローチでは、型と明示的に一致させることができ、可能性のある場所検索との衝突を心配する必要はありません。 – bstar

関連する問題