質問編集履歴

1

途中送信してしまったため、完成させて更新

2019/03/01 13:54

投稿

Sigma1630
Sigma1630

スコア36

test CHANGED
File without changes
test CHANGED
@@ -4,9 +4,11 @@
4
4
 
5
5
  以下のloginアクションの中で@userを取得しています。
6
6
 
7
+ ログインフォームの値を受けて、その値をもつユーザーがusersテーブルから取得するイメージです。
8
+
7
9
  ```ruby
8
10
 
9
- def login
11
+ def login
10
12
 
11
13
  @user=User.find_by(email:params[:email],password:params[:password])
12
14
 
@@ -27,3 +29,65 @@
27
29
  end
28
30
 
29
31
  ```
32
+
33
+ ここでリダイレクトされる"/"(トップページで)では以下のようなコードを記しています。
34
+
35
+ ```html
36
+
37
+ <div class="main top-main">
38
+
39
+ <div class="top-message">
40
+
41
+ <h2><%= "idは#{session[:id]}です" %></h2>
42
+
43
+ </div>
44
+
45
+ </div>
46
+
47
+ ```
48
+
49
+
50
+
51
+ 試しにid:1のユーザーが@userに取得されるようにしてloginアクションを実施します。
52
+
53
+ ![イメージ説明](61cf754faadd52c1d3a3db77068810d8.png)
54
+
55
+
56
+
57
+ 意図通りの表示がされました。flashも表示されていることから@userが取得され、if @userを通った模様です。
58
+
59
+
60
+
61
+ ここでトップページのコードを以下のように変えます。session[:id]を@user.idにします。
62
+
63
+ ```html
64
+
65
+ <div class="main top-main">
66
+
67
+ <div class="top-message">
68
+
69
+ <h2><%= "idは#{@user.id}です" %></h2>
70
+
71
+ </div>
72
+
73
+ </div>
74
+
75
+ ```
76
+
77
+ if @userが通ったことから確かに@userは存在するはずです。しかしloginアクションを実行すると以下のエラーがでます。
78
+
79
+
80
+
81
+ undefined method `id' for nil:NilClass
82
+
83
+
84
+
85
+ @userがnilで、それに対してidが使えないことを怒られています。
86
+
87
+
88
+
89
+ なぜ遷移時にloginアクション内では存在したはずの@userがnilになってしまうのでしょうか?もちろん遷移の過程で@userに変更が加わるルートは通っていないことを確認しています。
90
+
91
+
92
+
93
+ 恐れ入りますが教えていただけますと幸いです。