Railsチュートリアルの続きです。しばらく間が開きましたが、その間にチュートリアルの第7〜10章まで走破しました!ここからは各章の概要をメモする形にします。第7〜10章ではユーザーの追加、読み込み、更新、削除などCRUD処理を体験。それでは行きましょう!
【目次】
第7章 ユーザー登録
ここではユーザー登録機能を実装した。
「Sign up now」ボタンを押すと
ユーザー登録が画面になる
空欄や入力間違いがあるとエラー情報が表示される
登録が成功すると「Welcome to the Sample App!」メッセージと登録内容が表示される
- debug情報を表示(ローカルの開発環境のみで9
- users/1でユーザー情報が表示されるようにする
- debuggerメソッドを書くとターミナルにデバッグの詳細情報が表示される
- プロフィール画像はGravatarを利用した(gravatar_forヘルパーメソッド)
- 登録フォームを作成(form_withヘルパーメソッド)
- エラーメッセージにprivateキーワードを使う(外部ユーザーには非公開)
- Sassの@extend関数でBootstrapのhas-errorクラスを適用
- 登録成功後にredirect_to メソッドでユーザー情報画面にリダイレクト
- flash変数で画面遷移先にメッセージを表示
第8章 基本的なログイン機構
ここではログイン、ログアウト機能を実装した。
ヘッダーの「Log in」を押すと
ログイン画面に遷移する→EmailとPWを入力
ユーザー情報の画面に遷移する(ログイン後はヘッダーメニューが変わる)
ヘッダーの「Account」を押すとプルダウンが開く(「Log out」を押すとログアウトできる)
SP版の画面のCSSも設定した
ヘッダーにハンバーガーメニュー、フッターのリンクは縦並び
ハンバーガーを開くとメニューが現れる→「Log in」を押す
ログイン画面に遷移する→EmailとPWを入力
ユーザー情報の画面に遷移する
ハンバーガーメニューの「Account」を押すとプルダウンが開く(「Log out」を押すとログアウトできる)
- セッションを実装するためにcookieを使う
- &&を使う(JSと同じ)
- ||を||=でさらに省略した書き方をする
- javascript_importmap_tagsでheadタグにjsファイルをインポート
- ハンバーガーメニューの表示処理でturbo:loadというHotwireのTurboのイベントが使われている
第9章 発展的なログイン機構
remembermeにチェックしているとブラウザを一回閉じてもう一回開いてもログインしたまま
- Remember me機能を実装(記憶トークンの生成)
- remember_digest属性をUserモデルに追加
- urlsafe_base64メソッドでランダムな文字列を生成し、記憶トークンに使う
- 20.years.from_nowで20年後に切れるcookieを生成
- 三項演算子でif分岐を1行にする(JSと同じ)
- テストではログイン挙動なども細かく設定できる
第10章 ユーザーの更新・表示・削除
ユーザーの更新・表示・削除によってCRUD処理を体験
ユーザーの更新
更新完了
ユーザー一覧
一覧の2P目
ユーザー削除
削除完了
- 編集画面で@user変数からユーザー情報を抜き出して表示
- RESTではPATCHリクエストはそのままでは送信できないのでhiddenで隠したinputのvalueとしてPOSTで送信
- テスト駆動開発で受け入れテスト(Acceptance Tests)を体験
- 認可(authorization)設定:別ユーザーの時にログイン画面に遷移させる
- Faker gemでサンプルユーザーを追加する
- will_paginate gem とbootstrap-will_paginate gemでページネーション付きのユーザー一覧画面を作成
- admin属性をUserモデルに追加(管理者の判定)
- destroyアクションでユーザーを削除(管理者だけが実行できる)
- RESTではではDELETEリクエストをそのままでは送れないため、HotwireのTurbo("turbo-method": :delete)を使って送信する
最後に
駆け足になりましたが、Ruby on RailsにおけるCRUD操作を体験することができました。これまでがRailsの基礎の部分かなと思います。
残りは11〜14章。11章ではユーザー認証のためのメール送信などを実装するようです。ここからは応用編に入っていく感じになりそうで、一区切りがついた感じがします。
Railsチュートリアルの完走まであと一息!ラストスパート頑張ります。それではまた!