らくだ🐫にもできるRailsチュートリアル|7.4

7.4 ユーザー登録成功

新規ユーザーのデータが有効な場合、データベースに保存できるようにする

7.4.1 登録フォームの完成

users_controller.rbにコードを追加

createアクションに対応するテンプレートを作るのではなく
新しく作成されたユーザーの詳細画面にリダイレクトするように設定

演習

  1. 有効な情報を送信し、ユーザーが実際に作成されたことを、Railsコンソールを使って確認してみましょう。
  2. リスト 7.28を更新し、redirect_to user_url(@user)とredirect_to @userが同じ結果になることを確認してみましょう。

動作確認のみにて省略

7.4.2 flash

登録完了後に表示されるページにメッセージを表示し (この場合は新規ユーザーへのウェルカムメッセージ)、2度目以降にはそのページにメッセージを表示しないようにするというものです。

flash

Flashは直後のリクエストでのみ参照可能
ハッシュとしてアクセスする→FlashHashインスタンス

ハッシュに対してeachメソッドを実行すると
そのハッシュが持つキーと値のペアごとに処理を繰り返す
(4.3.3参照)

演習

  1. コンソールに移り、文字列内の式展開 (4.2.2) でシンボルを呼び出してみましょう。例えば”#{:success}”といったコードを実行すると、どんな値が返ってきますか? 確認してみてください。
  2. 先ほどの演習で試した結果を参考に、リスト 7.30のflashはどのような結果になるか考えてみてください

と、言う事?

フラッシュメッセージを日本語化してみる

I18nの記事に追加

7.4.3 実際のユーザー登録

一旦データベースをクリア

本文に従ってユーザー登録してみる

出来た!flashメッセージも日本語になってる✨🐫
→リロードするとflashメッセージは消える

演習

  1. Railsコンソールを使って、新しいユーザーが本当に作成されたのかもう一度チェックしてみましょう。結果は、リスト 7.32のようになるはずです。
  2. 自分のメールアドレスでユーザー登録を試してみましょう。既にGravatarに登録している場合、適切な画像が表示されているか確認してみてください。

#2は確認のみにて省略(登録済のため画像表示アリ)
所で時間が日本時間にあってないね?
データベースでは標準時間だけどviewに表示させると日本時間になってた
ただし表示形式を指定してあげる必要があるっぽい!

7.4.4 成功時のテスト

何か忘れてると思った!テスト!!
→有効な情報が送信されてユーザーが作成されたことを確認する

assert_differenceメソッド

このメソッドは第一引数に文字列 (‘User.count’) を取り、assert_differenceブロック内の処理を実行する直前と、実行した直後のUser.countの値を比較します。第二引数はオプションですが、ここには比較した結果の差異 (今回の場合は1) を渡します。

演習

  1. 7.4.2で実装したflashに対するテストを書いてみてください。どのくらい細かくテストするかはお任せします。リスト 7.34に最小限のテンプレートを用意しておいたので、参考にしてください (FILL_INの部分を適切なコードに置き換えると完成します)。ちなみに、テキストに対するテストは壊れやすいです。文量の少ないflashのキーであっても、それは同じです。筆者の場合、flashが空でないかをテストするだけの場合が多いです。
  2. 本文中でも指摘しましたが、flash用のHTML (リスト 7.31) は読みにくいです。より読みやすくしたリスト 7.35のコードに変更してみましょう。変更が終わったらテストスイートを実行し、正常に動作することを確認してください。なお、このコードでは、Railsのcontent_tagというヘルパーを使っています。
  3. リスト 7.28のリダイレクトの行をコメントアウトすると、テストが失敗することを確認してみましょう。
  4. リスト 7.28で、@user.saveの部分をfalseに置き換えたとしましょう (バグを埋め込んでしまったと仮定してください)。このとき、assert_differenceのテストではどのようにしてこのバグを検知するでしょうか? テストコードを追って考えてみてください

#1.flashが空でないかのテスト

初め「assert_not flash.nil」にしてエラー
nilはnilでtrue/falseの判定にならない→論理値で返すために?を付ける
所でnilって存在しないって意味だよね?
このテストは中身が空っぽの場合?flash自体が存在しない場合?
→試してみたところ、nil?では期待する結果が出ませんでした
flashが空でないかのテストって書いてあるね
と、言う訳で「assert_not flash.empty?」に落ち着きました

ここらへんとか


#2,#3は動作確認のみなので省略

@user.saveが実行されない→ユーザー増えない→エラー

content_tagヘルパー

htmlタグを生成するヘルパーメソッド

まとめとか感想

nil誤解してた
調べ直してなるほどーって思ったけどまたすぐ勘違いしそう💦

らくだ🐫にもできるRailsチュートリアルとは

「ド」が付く素人のらくだ🐫が勉強するRailsチュートリアルの学習記録です。
自分用に記録していますが、お役に立つことがあれば幸いです。

調べたとはいえらくだ🐫なりの解釈や説明が含まれます。間違っている部分もあるかと思います。そんな所は教えて頂けすと幸いなのですが、このブログにはコメント機能がありません💧お手数おかけしますがTwitterなどでご連絡いただければ幸いです