Rails tutorial8章

学んだこと

  • HTTP
  • sessionメソッド
  • findとfind_byの違い
  • ||=
  • cookiesメソッド
  • 三項演算子

HTTP

HTTPはステートレスなプロトコルで、リクエストごとが独立しているため、以前のリクエストの情報を利用できない。

ブラウザでのページの移動際に、ユーザーのIDを保持しておく手段がない。セッションを使い、半永続的なユーザーのブラウザとWebサーバ間での接続を設定する。

セッションはHTTPプロトコルと海藻が異なるので、HTTPの特性とは別に接続を確保できる。

sessionメソッド

sessionメソッドは、ハッシュのように扱え、一時的なcookieを作成できる。ユーザーのブラウザ内の一時cookiesに暗号化済みのものが自動で作成される。

sessioonメソッドで作成された一時cookiesは、ブラウザを閉じた瞬間に有効期限が終了する。

sessionメソッドで作成した一時cookiesは自動的に暗号化され、攻撃者が一時cookiesを盗み出したとしても、利用することはできない。

例えば、ユーザーIDがを一時cookiesの中から取得したとしても、本物のユーザーとしてログインすることはできない。

findとfind_byの違い

findは、該当するidがなかった場合、例外(エラー)を返す。

対してfind_byは該当するidがなかった場合、nilを返す。

||=(or equals)

||= とは、変数の値がnilなら変数に代入するが、nilでなければ代入しない。

@hoge
=> nil
@hoge ||= 'bar'
=> 'bar'
以下と同様
@hoge = @hoge || 'bar'
=> 'bar'
@hoge ||= 'fuga'
=> 'bar'

cookiesメソッド

cookiesメソッドは、cookieを生成するメソッド。sessionメソッドと同様にハッシュで扱う。個別のcookiesは、一つのvalueとオプションのexpiresからできる。expiresは省略可能。

cookies[:remember_token] = { value: remember_tokne, expires: 20.years.from_now.utc }

//以下と同義
cookies.parmanent[:remember_token] = remember_token

三項演算子

条件分岐をコンパクトに表現できる。

書式は以下。

boolean(条件式) trueの時の処理 : falseの時の処理