2008-09-23 40 views
3

我一直在嘗試使用routes.rb來爲我的網站創建一個URL /類似於:產品(產品是動態的)。問題是routes.rb很容易支持像/:product-similar這樣的URL,但不支持前者,因爲它要求:product前面有一個分隔符('/'是分隔符,但' - '不是)。分隔符列表在ActionController :: Routing :: SEPARATORS中。在Ruby on Rails中支持類似/ similar-to:的產品?

我無法添加' - '作爲分隔符,因爲:product也可以包含連字符。支持這樣的URL的最佳方式是什麼?

我成功嘗試過的一種方法是不使用routes.rb並將URL解析邏輯放入控制器本身,但這不是最簡潔的方式。

回答

1

事實上,你可以添加-作爲分隔符,然後使用路線通配。

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

然後,在ProductsController的#相似

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

雖然重構似乎更好,因爲使用這種方法,你需要特別處理,可包含連字符的所有子彈。

+0

這是行不通的。網址根本沒有匹配到這條路線。我想這是因爲即使在這種情況下,產品應該在分隔符之後。 – Sanjay 2009-09-15 10:55:04

0

我有點困惑,但你可能會添加「至」作爲分隔符?

+0

看起來像rails支持只有一個字符作爲分隔符 – Sanjay 2008-09-23 22:08:13

2

,使他們我會重構你的網址,只需「相似到/產品」

1

一個簡單的解決方案是使用routing filter。詳情請參閱自述文件。

使用路由篩選器,您可以擁有一個url /similar-to-:product,在它進入路由識別之前將其預處理爲/similar-to/:product。您還需要將生成的路徑從/similar-to/:product後處理至/similat-to-:product

相關問題