コントローラで生成した@userインスタンス変数が、リダイレクトした後に意図せず消えてしまいます。このインスタンス変数が遷移後も残るような解決策をご教示お願いします。
以下のloginアクションの中で@userを取得しています。
ログインフォームの値を受けて、その値をもつユーザーがusersテーブルから取得するイメージです。
ruby
1 def login 2 @user=User.find_by(email:params[:email],password:params[:password]) 3 if @user 4 session[:id] = @user.id 5 flash[:notice] = "ログインしました" 6 redirect_to("/") 7 else 8 render("users/login_form") 9 end 10 end
ここでリダイレクトされる"/"(トップページで)では以下のようなコードを記しています。
html
1<div class="main top-main"> 2 <div class="top-message"> 3 <h2><%= "idは#{session[:id]}です" %></h2> 4 </div> 5</div>
試しにid:1のユーザーが@userに取得されるようにしてloginアクションを実施します。
意図通りの表示がされました。flashも表示されていることから@userが取得され、if @userを通った模様です。
ここでトップページのコードを以下のように変えます。session[:id]を@user.idにします。
html
1<div class="main top-main"> 2 <div class="top-message"> 3 <h2><%= "idは#{@user.id}です" %></h2> 4 </div> 5</div>
if @userが通ったことから確かに@userは存在するはずです。しかしloginアクションを実行すると以下のエラーがでます。
undefined method `id' for nil:NilClass
@userがnilで、それに対してidが使えないことを怒られています。
なぜ遷移時にloginアクション内では存在したはずの@userがnilになってしまうのでしょうか?もちろん遷移の過程で@userに変更が加わるルートは通っていないことを確認しています。
恐れ入りますが教えていただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/01 16:51