2014-10-06 45 views
2

我剛剛看過Railscasts pro第250集,我不明白一件事。我說說這行:輔助方法中的參數

<%= link_to "Log out", session_path("whatever"), method: 'delete' %> 

作者說,這樣的事情:

session path helper method can expect an id to be passed through here

我的控制器動作:

def destroy 
    session[:user_id] = nil 
    redirect_to root_path, notice: "Looged out" 
    end 

在我route.rb文件:

resources :sessions 

爲什麼我不能通過<%= link_to "Log out", session_path(), method: 'delete' %>?當我這樣做時,我收到一個錯誤:

No route matches {:action=>"show", :controller=>"sessions"} missing required keys: [:id]

爲什麼需要id在這裏?

畢竟我沒有在任何地方使用這個參數。

回答

3

當我們定義了一個控制器的路線,我們添加此以下行路線文件

resources :sessions 

上面這條線,暗中創建7個默認路由

         sessions GET  /sessions(.:format)                 sessions#index 
               POST  /sessions(.:format)                 sessions#create 
            new_session GET  /sessions/new(.:format)                sessions#new 
           edit_session GET  /sessions/:id/edit(.:format)              sessions#edit 
             session GET  /sessions/:id(.:format)                sessions#show 
               PUT  /sessions/:id(.:format)                sessions#update 
               DELETE /sessions/:id(.:format)                sessions#destroy 

這裏,爲destroy行動路線是/sessions/:id(.:format)DELETE方法。由於url需要url中的:id,所以您需要發送一些id。 ID意味着它不應該只是整數,它可以是任何像字符串。因此,他們在刪除會話時使用該網址中的「無論」。

1

該路線是執行缺少的id。我看不到你的代碼的其餘部分,但你可能有地方的路線,看起來像這樣:

session GET /sessions/:id(.:format)   sessions#show 

這條路線,您需要調用它,用一個id。

+0

謝謝。我在'route.rb'中使用'resources:sessions' – Jensky 2014-10-06 07:33:35

+0

你可以添加一個新的路由或者只是傳遞任何東西(例如'whatever')到'session_path()'中以滿足參數要求。 – 2014-10-06 07:38:18