给出以下路线文件:
Rails.application.routes.draw do
root to: 'visitors#index'
devise_for :users
resources :users do
resources :wishlists, :only => [:create] do
post :action => :create, :on => :collection
resources :items, :only => [:create, :update, :remove_item] do
post :action => :create, :on => :collection
put :action => :update
delete :action => :remove_item
end
end
end
end
Rails会生成包含以下冲突路线的路线:
PUT /wishlists/:wishlist_id/items/:item_id(.:format) items#update
wishlist_item PUT /wishlists/:wishlist_id/items/:id(.:format) items#update
为什么第一个产生?我希望只有第二个(包括路径助手)
我正在使用Rails 4.1.4
答案 0 :(得分:1)
因为你的声明是同一条路线的2倍:
resources :items, :only => [:create, :update, :remove_item]
中的第一个生成此资源: / wishlists /:wishlist_id / items / :id (:。format) put :action => :update
中的第二个会生成以下内容: / wishlists /:wishlist_id / items / :item_id (:。format) 你应该只使用其中一个(我推荐第一个)。
如果您想了解有关路由的更多信息,请务必继续使用this page。