我正在阅读 Michael Hartl 教程,但无法让注销工作正常进行。
我不是通过电子邮件识别,而是通过用户名工作。
注册和唱歌都可以正常工作,但我的退出导致错误:
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with username = signout
app/controllers/users_controller.rb:9:in `show'
为什么它在显示方法中的 users_controller 中查找?为什么这么叫?应该是调用会话控制器的delete方法吧?
违规的第 9 行是:
8 def show
9 @user = User.find_by_username!(params[:username])
10 end
我不明白参数在哪里传递(在哪里和什么地方),导致它认为“signout”== 用户名,而不是通过用户名查找和路由到session#destroy
. 我该如何诊断?我可以在 Rails 控制台中输入什么来找出参数中当前包含的内容?
更新:
当我立即尝试时,我认为下面的解决方案有效,但问题刚刚从一条错误消息变为另一条错误消息。我已经按照建议移动了路线,但仍在继续
Request Parameters: {"username"=>"signout"}
只是这次它位于我的
`Users#show model: users/show.html.erb where line #1 raised:
undefined method username' for nil:NilClass
Extracted source (around line #1):
1: <\h2><%= @user.username %><\/h2>
2:
3: <!--
4:`
这是我的 routes.rb 文件的内容:
match 'signup', to: 'users#new'
match 'signin', to: 'sessions#new'
match 'signout', to: 'sessions#destroy', via: 'delete'
resources :sessions, only: [:new, :create, :destroy]
match "/:username" => "users#show", via: "get"
resources :users