質問するログイン新規登録

回答編集履歴

1

確認ポイントを添えてみました。

2021/02/12 23:10

投稿

suama
suama

スコア1997

answer CHANGED
@@ -4,4 +4,44 @@
4
4
  AccountActivationsControllerのeditのところ。
5
5
  もしキャプチャのソースのほうを優先するとして、"undefined mthod activate for nil class" というメッセージが出ているのなら、user.activate しようとしている "user" 自体がnilになっているのでは。
6
6
 
7
- つまり、user = User.find_by(email: params[:email]) のところでうまくuserが取得できてないと思います。
7
+ つまり、user = User.find_by(email: params[:email]) のところでうまくuserが取得できてないと思います。
8
+
9
+ ## 20210213: 追記
10
+
11
+ コメントいただきましたので、追記をしてみます。解決に直結しなくてすみません!
12
+ エラーのキャプチャを見ると、どんなパラメータがコントローラーに渡っているかが表示されていますね。
13
+
14
+ > params -> { email: "3Drensyuu@gmail.com", id: 'xxxxx' }
15
+
16
+ という形でデータが渡っているので、確かに params[:email] でメールアドレスは取得できるかなと思います。
17
+
18
+ さて、rails console でUser.lastは確認しているとのことなので、同じように、rails consoneで User.find_by(email: "3Drensyuu@gmail.com") とした時に結果が返るでしょうか。
19
+
20
+ ただ、メールが届いているということなので、きっと存在するのでしょうけれど....。
21
+
22
+
23
+ ```ruby
24
+ def edit
25
+ user = User.find_by(email: params[:email])
26
+ # ここをいったん書き換えてみます(user == userでなくuser.present?)
27
+ # present? は対象のオブジェクトがnilでないことを示します。
28
+ # find_byでヒットしてればnilじゃないはず
29
+ # デバッグできるなら binding.pry を差し込んでみましょう
30
+ if user.present?
31
+ user.update_attribute(:activated, true)
32
+ user.update_attribute(:activated_at, Time.zone.now)
33
+ log_in user
34
+ flash[:success] = "Account activated!"
35
+ redirect_to user
36
+ else
37
+ flash[:danger] = "Invalid activation link"
38
+ redirect_to root_url
39
+ end
40
+ end
41
+ ```
42
+
43
+
44
+ 上記に加えて、editの処理が走った時の、Rails側のログも見てみると、なにかエラーの情報などが出ているかと思います。
45
+
46
+ find_by(xxxx) を行うと、SQL のSELECT文がRails側のログに出力されます。
47
+ ``SELECT * FROM USERS WHERE email = '....'`` 的な文です。送信したときのリクエストパラメータとともに、この前後の出力でもなにかヒントがあるかもしれません。