2015-01-04 2 views
0

Учитывая следующие маршруты файла:Почему Rails порождающие два пути для того же ресурса

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

ответ

1

Поскольку ваш объявляем 2 раза один и тот же маршрут:

  • первый в resources :items, :only => [:create, :update, :remove_item] генерирует этот ресурс: /Сундуки /: wishlist_id/детали/: идентификатор (: формат.)
  • второй в put :action => :update генерирует этот: /Сундуки /: wishlis t_id/предметы/: item_id (:. формат)

Вы должны использовать только один из них (я рекомендую первый один).

Если вы хотите получить дополнительную информацию о маршрутизации, обязательно перейдите на страницу this page.

Смежные вопросы