3

我一直在尝试使用 routes.rb 为我的网站创建一个 URL /similar-to-:product (其中产品是动态的)。问题是 routes.rb 很容易支持 /:product-similar 之类的 URL,但不支持前者,因为它要求 :product 前面有分隔符('/' 是分隔符,但 '-' 不是)。分隔符列表在 ActionController::Routing::SEPARATORS 中。

我不能添加 '-' 作为分隔符,因为 :product 也可以包含连字符。支持这样的 URL 的最佳方式是什么?

我成功尝试过的一种方法是不使用 routes.rb 并将 URL 解析逻辑放在控制器本身中,但这不是最干净的方法。

4

4 回答 4

2

我会重构您的 URL,以便它们只是“类似于/产品”

于 2008-09-23T17:34:53.257 回答
1

实际上,您可以添加-为分隔符,然后使用路由通配符。

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

然后,在 ProductsController#similar

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

尽管重构看起来确实更好,因为使用这种方法,您需要专门处理所有可以包含连字符的 slug。

于 2009-09-06T08:34:46.537 回答
1

一个简单的解决方案是使用路由过滤器。有关详细信息,请参阅自述文件。

使用路由过滤器,您可以拥有一个 url ,在它进行路由识别之前对其进行/similar-to-:product预处理。/similar-to/:product您还需要对生成的路径进行后处理,从/similar-to/:product/similat-to-:product.

于 2009-09-25T09:16:07.777 回答
0

我有点困惑,但你可以添加“to-”作为分隔符吗?

于 2008-09-23T12:58:21.017 回答