30DAYSトライアル4th(Rails)DAY22(仮)の課題は「Progate Rails コース(8章まで)」です。
※(仮)としているのは東京フリーランスの記事ではDAY20までしか書かれていないので、その先を勝手に進めているからです。
ProgateのRailsコースの8章はWebアプリには欠かせないログイン関係の学習を行っていくことになります。
目次
30DAYSトライアル4th(Rails)DAY22(仮)の学習内容
30DAYSトライアル4th(Rails)DAY20の学習内容は以下のとおりです。
- ログイン機能の準備:ログインページ・パスワードカラムの追加など
- ログイン機能作成:ログイン・ログアウト処理など
- ログイン機能の仕上げ:ログインしていない場合のアクセス制限など
ログイン機能の準備:ログインページ・パスワードカラムの追加など
パスワード用のフォーム:<input type=”password”>
パスワード入力用のinputタグのtype属性を「type=”password”」とすることで、入力した文字をを●で表示することができる。
ルーティングのgetとpost
ルーティングのURLにgetとpostで同じURLを指定できる。(内部的には別のURLと認識される)
この課題ではgetとpostそれぞれで「login」というURLを使用するが、getの「login」はログインフォーム、postの「login」は実際のログイン処理を行うようにアクションを分けている。
ログイン機能作成:ログイン・ログアウト処理など
複数条件を指定してテーブルデータを取得:find_by(条件1, 条件2, ・・・)
「find_byメソッド」は条件を「,」で区切ることで複数の条件を指定することができる。
この課題ではログイン情報である、メールアドレスとパスワードを1行でチェックするために使われている。
1 |
変数名 = モデル名.find_by(カラム名1: 条件値, カラム名2: 条件値, ・・・) |
session変数:ログイン状態の保持
ページを移動しても変数の値を保持したい場合はsession変数を使用する。session変数に保存された変数はブラウザ自体に保存される。
1 2 3 4 |
session[:キー値] = 値 # ビューでの使用方法 <%= session[:キー値] %> |
progateの課題では「session[:user_id]」にusersテーブルのidを格納することで、ログインユーザーを保持している。
session変数のクリア:ログアウト処理
session変数はnilを代入することで、クリアすることが可能。
1 |
sesson[:キー値] = nil |
課題では「session[:user_id] = nil」とすることでログイン情報をクリアしてログアウトしたこととしている。
getとpostの使い分け
getとpostの使い分けは複雑なので、最低限以下は覚えておく。
get
- データベースを変更しない場合
post
- データベースを変更する場合
- sessionの値を変更する場合
共通の変数定義:before_action
各コントローラの全アクションで共通する処理がある場合には、before_actionを使う。before_actionはアクションが実行される前に必ず実行されるので、前アクションで使用する共通の変数などに使用できる。
1 2 3 4 5 6 7 |
# application_controller.rb class ApplicationController < ActionController::Base before_action :メソッド名 def メソッド名 共通処理 end |
ログイン機能の仕上げ:ログインしていない場合のアクセス制限など
before_acitonを特定のアクションのみで実行する:only
各コントローラでbefore_acitonを使用婆に「only」を指定することで、任意のアクションのみでbefore_actionで定義したメソッドを実行できる。
1 |
before_action :メソッド名, {only: [:アクション名1, :アクション名2, ・・・]} |
before_actionはapplicationコントローラのメソッドですが、各コントローラはapplicationコントローラを継承しているので、before_actionメソッドを使用することができる。
まとめ
ユーザー管理という重要な部分だけあってボリューミーな内容でした。
道場コースなどでしっかりと復習しないとあっという間に抜けてしまいそうです。
ユーザー管理をする以外でもsession変数やグローバル関数的なやつとかはよく使いそうですしね。
今の時点ではもう1周するとかは考えていませんが、道場コースの結果次第では最悪もう1周するのも考えるかもしれません。