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

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

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

有帮助吗?

解决方案

实际上你可以添加 - 作为分隔符,然后使用route globbing。

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

然后,在ProductsController#similar

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

虽然重构确实看起来更好,但是通过这种方法,你需要专门处理所有可以包含连字符的slu ..

其他提示

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

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

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

我有点困惑,但你可以添加“to - ”作为一个分离者?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top