2011-06-09 76 views
4

我在routes.rb中,看起来像这样的条目:如何解决这些冲突的Rails路由?

resources :baskets, :shallow => true, :only => :show 
    resource :owned, :only => [:create, :destroy] 
end 

get '/baskets/owned', :to => 'owners#index' 

这将创建一个看起来像路线:

basket  GET /baskets/:id(.:format) 
baskets_owned GET /baskets/owned(.:format) 
# ... 

但现在,当我打电话/篮/所有,我得到这个:

Started GET "/baskets/owned" for 10.0.1.2 at 2011-06-09 10:31:33 -0400 
    Processing by BasketsController#show as JSON 
    Parameters: {"id"=>"owned"} 

什么是解决这个路由冲突的最习惯的方法?

回答

5

Rails匹配从第一次定义和继续向下开始的路由,直到找到匹配为止;使用第一条匹配的路线,并忽略所有其他路线。

解决问题的方法是将get '/baskets/owned'路由放在resources路由之前。