2011-11-18 68 views
0

使用Rails 3.1。我在我的路線如下:基於模型的Rails路由約束條件

在我的模型Shop,我有一個名爲shop_type列有兩種boutiquesaloon。相反,具有URL的:

http://localhost/spots/1 

我想通過它分開shop_type到:

http://localhost/boutique/1 
http://localhost/saloon/2 

所以我增加了以下我的路線:

resources :boutique, :controller => 'shops', :constraints => { :shop_type => 'boutique' } 
resources :saloon, :controller => 'shops', :constraints => { :shop_type => 'saloon' } 

的問題這是我可以訪問記錄ID 1shop_type = boutique任何URL。理想情況下,當用戶試圖訪問時它應該會返回錯誤

http://localhost/saloon/1 

但上面的URL只是正常工作,這不是我想要的。

另外,是否有無論如何將所有shops/1重定向到shop_type的新URL?

非常感謝。

回答

1

如果你想這樣做,那麼你的應用程序可能告訴你它確實需要兩個獨立的類,精品店和轎車。你能做到嗎?如果不是,爲什麼不呢?

+0

很多工作要改變。 – Victor

+1

如果這是正確的做法,那麼做這項工作,而不是圍繞它進行研究並創造更多的技術債務。 –

+0

這只是爲了SEO的目的。 – Victor

0

也許它能夠更好地告訴Rails DIRECTO允許的網址爲:

get "/:shop_type/:id", :to => 'shop_controller#show' 

並在控制器檢查,如果記錄存在,並返回:狀態=> 404,如果不是:

@shop = Shop.where(:id => params[:id], :shop_type => params[:shop_type]).first 
render :status => 404 and return if @shop.nil? 

注意提供的路由過於貪婪並放在所有其他路由之後,因此它不會「吃」其他請求。