我刚刚看了 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
我的 Controller 操作:
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?
毕竟我不会在任何地方使用这个参数。
最佳答案
当我们为 Controller 定义路由时,我们将以下行添加到路由文件中
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 中需要包含 :id
,因此您需要发送一些 id。 id 意味着它不应该只是整数,它可以是字符串之类的任何内容。因此,他们在删除 session 时在该 URL 中使用“whatever”。
关于ruby-on-rails - 辅助方法中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26211505/