使用Rails 3.1。我的路线中有以下内容:
在我的模型Shop
中,我有一个名为shop_type
的列,其中包含boutique
或saloon
。而不是有网址:
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
的新网址?
非常感谢。
答案 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?
请注意,提供的路线过于贪婪,并将其放在所有其他路线之后,因此不会“吃掉”其他请求。