2011-11-18 55 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? 

注意提供的路由过于贪婪并放在所有其他路由之后,因此它不会“吃”其他请求。