Rails基于模型路由约束

时间:2011-11-18 18:22:48

标签: ruby-on-rails ruby-on-rails-3

使用Rails 3.1。我的路线中有以下内容:

在我的模型Shop中,我有一个名为shop_type的列,其中包含boutiquesaloon。而不是有网址:

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 1与任一URL访问记录shop_type = boutique。理想情况下,它应该在用户尝试访问时返回错误

http://localhost/saloon/1

但上面的网址工作正常,这不是我想要的。

此外,是否仍然要将所有shops/1重定向到shop_type的新网址?

非常感谢。

2 个答案:

答案 0 :(得分:1)

如果您想这样做,那么您的应用程序可能会告诉您它确实需要两个单独的类,Boutique和Saloon。你能做到吗?如果没有,为什么不呢?

答案 1 :(得分:0)

也许最好告诉Rails directo允许网址为:

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

在控制器中检查记录是否存在,并返回:status => 404如果不是:

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

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