如何解决这些冲突的Rails路由?

Mic*_*ham 4 rails-routing ruby-on-rails-3

我的routes.rb中有一个条目,如下所示:

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

get '/baskets/owned', :to => 'owners#index'
Run Code Online (Sandbox Code Playgroud)

这会创建如下所示的路线:

basket        GET    /baskets/:id(.:format)
baskets_owned GET    /baskets/owned(.:format)
# ...
Run Code Online (Sandbox Code Playgroud)

但现在,当我打电话/篮子/拥有时,我得到了这个:

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"}
Run Code Online (Sandbox Code Playgroud)

解决此路由冲突的最惯用方法是什么?

Cho*_*ett 6

Rails匹配从第一个定义开始并继续向下直到找到匹配的路由; 使用第一个匹配的路由,忽略所有其他路由.

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