2015-04-17 91 views
0

我有我的路線問題:Rails的路線網址edit_path

No route matches events/edit_national_event 

生成的URL: http://localhost:3000/events/edit_national_event.:id

我需要: http://localhost:3000/events/:id/edit_national_event

它與毀滅,但不能用編輯。我的代碼有什麼問題?

路線:

resources :events, only: [:index, :destroy] do 
    collection do 
     get :new_national_event 
     get :new_local_event 
     post :create_national_event 
     post :create_local_event 
    end 
    member do 
     get :edit_national_event 
     get :edit_local_event 
     put :update_national_event 
     put :update_local_event 
    end 
    end 

事件controllor:

def edit_national_event 
    @event = Event.find(params[:id]) 
end 

觀點:

@group_events.each do |event| 
    tr 
    td 
     =event.title 
    td 
     =link_to edit_national_event_event_path(event) 
     =link_to event_path(event), method: :delete 

當我在做耙路線:

new_national_event_events GET /events/new_national_event(.:format)         events#new_national_event 
new_local_event_events GET /events/new_local_event(.:format)          events#new_local_event 
create_national_event_events POST /events/create_national_event(.:format)        events#create_national_event 
create_local_event_events POST /events/create_local_event(.:format)         events#create_local_event 
edit_national_event_event GET /events/:id/edit_national_event(.:format)        events#edit_national_event 
edit_local_event_event GET /events/:id/edit_local_event(.:format)         events#edit_local_event 
update_national_event_event PUT /events/:id/update_national_event(.:format)       events#update_national_event 
update_local_event_event PUT /events/:id/update_local_event(.:format)        events#update_local_event 
events GET /events(.:format)              events#index 
event DELETE /events/:id(.:format)             events#destroy 

回答

0

正如您在rake routes輸出中所看到的,您要查找的路線顯示爲/events/:id/edit_national_event(.:format)。這意味着它期待URL中的事件ID。你不提供一個,這是它不匹配的原因。

預期ID的原因是您在member塊中定義路線,而不是在collection之一。如果您不希望網址中包含ID,請將路線移至collection區塊。如果您確實需要ID,請確保在鏈接到該操作時包含該ID。