1

我有一个有趣的路由情况,我在处理时遇到了一些麻烦......这是针对 rails 2.3 应用程序的,这是场景:

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

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

这两条路线在路线中共享相同的位置,因此需要在 :location 或 :property_types 上设置 :requirement 以区分两者。

由于 :location 非常开放,因此 :property_types 是可行的方法,因为我有一个模块可以轻松编译所有现有属性类型的列表以进行正则表达式匹配。

问题:/for-sale/us/apartment-loft

由于 :property_types 是一个数组,我必须从 params 对象中解析出多个 property_types(显然是在路由器之外)。如果我有这样的情况,我不可能在路由器中针对已知的属性类型进行正则表达式匹配,因为 :property_types 可能会返回多个连字符类型。

那么我的问题是,我是否可以获取 :property_types 字符串并专门针对 :requirements 匹配对其进行修改?如果我可以将'apartment-loft' 替换为那个匹配的'apartment' (/^\w+/),那么我就有了一些我可以实际正则表达式匹配的东西。

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/}

上述实现适用于具有一个 property_type 的路由,但对于具有多个连字符 property_types 的路由,我就碰壁了。

4

1 回答 1

1

如果可行,我建议为这两种情况创建显式路由和控制器操作:

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/}

然后你不必担心路由器上的正则表达式匹配,你可以在控制器中做它。

于 2012-04-20T14:31:11.803 回答