回答編集履歴

4

不要なコードも含めて回答を見直し修正しました。

2020/02/18 05:59

投稿

rhiroe
rhiroe

スコア2344

test CHANGED
@@ -20,13 +20,13 @@
20
20
 
21
21
  - @user = User.find_by(email: params[:email])
22
22
 
23
- + @user = User.find_or_initialize_by(email: params[:email])
23
+ + @user = User.find_or_initialize_by(email: user_params[:email])
24
24
 
25
25
 
26
26
 
27
27
  - if @user && @user.authenticate(params[:password])
28
28
 
29
- + if @user.persisted? && @user.authenticate(params[:password])
29
+ + if @user.persisted? && @user.authenticate(user_params[:password])
30
30
 
31
31
  session[:user_id] = @user.id
32
32
 
@@ -36,11 +36,11 @@
36
36
 
37
37
  else
38
38
 
39
- @error_message = "メールアドレスかパスワードが違います"
39
+ - @error_message = "メールアドレスかパスワードが違います"
40
40
 
41
- @email = params[:email]
41
+ - @email = params[:email]
42
42
 
43
- @password = params[:password]
43
+ - @password = params[:password]
44
44
 
45
45
  render("users/login_form")
46
46
 
@@ -56,6 +56,6 @@
56
56
 
57
57
  ```erb
58
58
 
59
- <%= form_for @user, url: users_login_path do |f| %>
59
+ <%= form_for @user, url: login_path do |f| %>
60
60
 
61
61
  ```

3

修正

2020/02/18 05:59

投稿

rhiroe
rhiroe

スコア2344

test CHANGED
@@ -24,7 +24,9 @@
24
24
 
25
25
 
26
26
 
27
- if @user && @user.authenticate(params[:password])
27
+ - if @user && @user.authenticate(params[:password])
28
+
29
+ + if @user.persisted? && @user.authenticate(params[:password])
28
30
 
29
31
  session[:user_id] = @user.id
30
32
 

2

修正

2020/02/18 04:13

投稿

rhiroe
rhiroe

スコア2344

test CHANGED
@@ -1,4 +1,6 @@
1
1
  他の回答者さんもおっしゃっていますが、`find_by`だと`nil`を返す可能性があるので、必ず`User`インスタンスを返すようにしましょう。
2
+
3
+
2
4
 
3
5
  ```diff
4
6
 
@@ -9,6 +11,8 @@
9
11
  end
10
12
 
11
13
  ```
14
+
15
+
12
16
 
13
17
  ```diff
14
18
 

1

追記

2020/02/18 04:08

投稿

rhiroe
rhiroe

スコア2344

test CHANGED
@@ -1,4 +1,14 @@
1
1
  他の回答者さんもおっしゃっていますが、`find_by`だと`nil`を返す可能性があるので、必ず`User`インスタンスを返すようにしましょう。
2
+
3
+ ```diff
4
+
5
+ def login_form
6
+
7
+ + @user = User.new
8
+
9
+ end
10
+
11
+ ```
2
12
 
3
13
  ```diff
4
14