いつものように、自分がrailsチュートリアルで理解するのに時間が掛かったところをまとめていきたいと思います。
リスト11.3.2の下に、
if user && !user.activated? && user.authenticated?(:activation, params[:id])
というコードがあります。
このparams[:id]が、なんでこんな場所にあるのか、初めうまく理解できませんでした。
さかのぼってもう一度読み返してみると、リスト11.12の下に、次のような説明書きがありました。
上のURLの「q5lt38hQDc_959PVoo6b7A」という部分はnew_tokenメソッドで生成されたものです (リスト 9.2)。URLで使えるようにBase64でエンコードされています。
これはちょうど/users/1/editの「1」のようなユーザーIDと同じ役割を果たします。
このトークンは、特にAccountActivationsコントローラのeditアクションではparamsハッシュでparams[:id]として参照できます。
つまり、ここでのparams[:id]はactivation_tokenになっているんですね。
だからこそ、authenticated?(:activation, params[:id])で、問題ないというわけです。
bashで長いコマンドを入力するときは、バックスラッシュ(あるいは円マーク)を入力してから、エンターを押せば改行することが出来ます。忘れそうなので一応メモ。
@userはインスタンス変数であり、ここに代入することで、ビューでも使えるようになります。
リスト11.18のハイライト部分についてです。
ここでは、まずUser.firstを代入しています。そしてUser.new_tokenでアクティベーショントークンを作っています。これは、データベースに存在していないため、ここでnewtokenを作成する必要があります。そして、そのあとにメールを送っています。
リスト11.40についてです。
ここで、
redirect_to root_url and return unless (コードを書き込む)
というコードが出来てきます。
この(コードを書き込む)の答えは@user.activated?なので
redirect_to root_url and return unless @user.activated?
になるのですが、問題はそこではありません。
この「return」は何なのでしょうか。
いろいろ調べたところ、このリターンは、ここでコードの処理を終わらせることができるのである。
そのあとにコードがあって、returnが実行されればそこで処理を終わらせられるし、returnが実行されなければその後の処理を続けられるという感じである。
また、二重レンダーも防げるとのことらしい。
詳細については、以下の記事を読むと分かりやすいと思います。
【Rails】 redirect_toの使い方を理解して指定したURLに遷移させよう | Pikawaka
https://pikawaka.com/rails/redirect_to
よく分からなかったところだと、
リスト11.35の
UserMailer.account_activation(self).deliver_now
ここがどうしてselfになるのか、まだちゃんと理解できていないので、後日調べたいと思います。
あとはリスト11.19の下の
assert_match /\w+/, 'foobar' # true
assert_match /\w+/, '$#!*+@' # false
これもちょっと分からなかったです。記号があるとfalseになるよ、という意味だとは思うのですが……
その他、参照にした記事を貼っていきたいと思います。
Ruby - userと@userの違いってなんでしょう?|teratail
https://teratail.com/questions/45311
らくだ🐫にもできるRailsチュートリアル|11.1 | らくだ🐫のさいと
https://rakuda3desu.net/rakudas-rails-tutorial11-1/
素人による "and return unless" - Qiita
https://qiita.com/okaryo/items/571478b78da6538da2c3
ActionMailerは何をしているのか - Qiita
https://qiita.com/fursich/items/bb75a06714bcad6a0afb
redirect_to and return と書いて良いのか? « Teckuboon
http://dev.trick-with.net/2012/12/redirect_to-and-return-is-correct-or-not/
【Rails】 redirect_toの使い方を理解して指定したURLに遷移させよう | Pikawaka
https://pikawaka.com/rails/redirect_to
Ruby on Rails Callback, what is difference between :before_save and :before_create? - Stack Overflow
https://stackoverflow.com/questions/6249475/ruby-on-rails-callback-what-is-difference-between-before-save-and-before-crea
Ruby - 【Rails】selfと@の使い分けはどうすればいいでしょうか?|teratail
https://teratail.com/questions/202474
忘れがちなrenderメソッドの使い方まとめ [Rails] - Qiita
https://qiita.com/hayashino/items/c2a4e7d3edbdcce3cd2a
Webpacker::Manifest::MissingEntryError | 雨男の本棚
https://srainy-bookshelf.com/programing/2021-02-02
Rails ルーティング 基礎 まとめ - Qiita
https://qiita.com/akk11_k/items/a6a21beb2b736ebbc147