Michael Hartlチュートリアルを実行していますが、サインアウトを機能させるのに問題があります。
メールでIDを取得する代わりに、ユーザー名で作業しています。
サインアップと歌唱はどちらも問題なく機能しますが、サインアウトするとエラーが発生します。
ActiveRecord::RecordNotFound in UsersController#show
Couldn't find User with username = signout
app/controllers/users_controller.rb:9:in `show'
showメソッドでusers_controllerを検索するのはなぜですか?なぜそれを呼んでいるのですか?セッションコントローラのdeleteメソッドを呼び出す必要がありますよね?
問題のある行9は次のとおりです。
8 def show
9 @user = User.find_by_username!(params[:username])
10 end
ユーザー名で検索してにルーティングするのではなく、「signout」==ユーザー名と見なすパラメータがどこに(どこに、何に)渡されるのかわかりませんsession#destroy
。どうすればこれを診断できますか?Railsコンソールに何を入力して、現在paramsに含まれているものを確認できますか?
アップデート:
すぐに試してみると、以下の解決策がうまくいくと思いましたが、問題はエラーメッセージごとに変わったばかりでした。私は提案されたようにルートを移動しましたが、まだ取得しています
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