回答編集履歴
4
不要なコードも含めて回答を見直し修正しました。
answer
CHANGED
@@ -9,17 +9,17 @@
|
|
9
9
|
```diff
|
10
10
|
def login
|
11
11
|
- @user = User.find_by(email: params[:email])
|
12
|
-
+ @user = User.find_or_initialize_by(email:
|
12
|
+
+ @user = User.find_or_initialize_by(email: user_params[:email])
|
13
13
|
|
14
14
|
- if @user && @user.authenticate(params[:password])
|
15
|
-
+ if @user.persisted? && @user.authenticate(
|
15
|
+
+ if @user.persisted? && @user.authenticate(user_params[:password])
|
16
16
|
session[:user_id] = @user.id
|
17
17
|
flash[:notice] = "ログイン成功"
|
18
18
|
redirect_to("/posts/index")
|
19
19
|
else
|
20
|
-
|
20
|
+
- @error_message = "メールアドレスかパスワードが違います"
|
21
|
-
|
21
|
+
- @email = params[:email]
|
22
|
-
|
22
|
+
- @password = params[:password]
|
23
23
|
render("users/login_form")
|
24
24
|
end
|
25
25
|
end
|
@@ -27,5 +27,5 @@
|
|
27
27
|
`form_for`にモデルのインスタンスを渡しただけの場合、そのインスタンス情報が新規で作られたものであれば`create`に、DBから取り出したものであれば`edit`に向けて送信されます。
|
28
28
|
今回はそのどちらでもない`login`に送信したいわけですので`:url`を明示的に指定しましょう。
|
29
29
|
```erb
|
30
|
-
<%= form_for @user, url:
|
30
|
+
<%= form_for @user, url: login_path do |f| %>
|
31
31
|
```
|
3
修正
answer
CHANGED
@@ -11,7 +11,8 @@
|
|
11
11
|
- @user = User.find_by(email: params[:email])
|
12
12
|
+ @user = User.find_or_initialize_by(email: params[:email])
|
13
13
|
|
14
|
-
|
14
|
+
- if @user && @user.authenticate(params[:password])
|
15
|
+
+ if @user.persisted? && @user.authenticate(params[:password])
|
15
16
|
session[:user_id] = @user.id
|
16
17
|
flash[:notice] = "ログイン成功"
|
17
18
|
redirect_to("/posts/index")
|
2
修正
answer
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
他の回答者さんもおっしゃっていますが、`find_by`だと`nil`を返す可能性があるので、必ず`User`インスタンスを返すようにしましょう。
|
2
|
+
|
2
3
|
```diff
|
3
4
|
def login_form
|
4
5
|
+ @user = User.new
|
5
6
|
end
|
6
7
|
```
|
8
|
+
|
7
9
|
```diff
|
8
10
|
def login
|
9
11
|
- @user = User.find_by(email: params[:email])
|
1
追記
answer
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
他の回答者さんもおっしゃっていますが、`find_by`だと`nil`を返す可能性があるので、必ず`User`インスタンスを返すようにしましょう。
|
2
2
|
```diff
|
3
|
+
def login_form
|
4
|
+
+ @user = User.new
|
5
|
+
end
|
6
|
+
```
|
7
|
+
```diff
|
3
8
|
def login
|
4
9
|
- @user = User.find_by(email: params[:email])
|
5
10
|
+ @user = User.find_or_initialize_by(email: params[:email])
|