参考書を読んだメモ : 独習Ruby on Rails 9章

独習Ruby on Rails

コントローラーによるデータの扱い

コントローラーとデータの入出力

コントローラーが扱うパラメーター

  • フォームパラメーター(POSTパラメーター): request_parameters
    • 画面の入力フォームから送信されるデータ
    • HTTPのPOSTリクエストのメッセージボディを通して渡されます
  • ルートパラメーター(パスパラメーター): path_parameters
    • URIの一部としてルートに組み込まれるパラメーター
    • /users/:id:id
  • クエリパラメーター(GETパラメーター): query_parameters
    • URIのうち?以降で指定される問合せなどに使用される

パラメーターの参照・取得

  • paramsインスタンスを使う
  • コントローラーのアクションで使用する場合パラメーターの種類は異なっても全てparamsインスタンスから取ることができる

ストロングパラメーター

  • マスアサインメント(一括指定): 受け取ったフォームパラメーターを一括指定してモデルオブジェクトを自動生成する機能
  • マスアサインメントの際に悪意のある不正な属性を組み込まれると危険なのでそれを防ぐ仕組みがストロングパラメーター
  • requireメソッド
    • 与えられたハッシュキーに対するパラメーター値を返す
    • パラメーターが存在しない場合例外を発生させる
  • permitメソッド
    • 指定されたフィルターリストの各属性に対応する許可済み属性をtrueとしたオブジェクト
    • permit が許可した属性のみのパラメーターとなる

renderメソッド

  • レンダリングをする
  • 指定されたルールに基づいて対応するビューテンプレートを呼び出す
  • 1回のアクションにおいて一回のみ実行
  • 明示的に指定しなくても条件に該当する場合アクション名に相当するビューテンプレートを探し出し暗黙的に実行する
    • 条件
      • ルートで呼び出されたアクションがコントローラー内にない
      • ルートで呼び出されたアクション内にrenderメソッドがない
      • render メソッドにビューを指定する引数がない
      • ルートで呼び出されたアクション内のrenderメソッドのビュー名がアクション名と同じ
  • render メソッドのオプション
    • :action
      • コントローラ内の他のアクションのテンプレートを出力する場合に使う
    • :template
      • 異なるコントローラーのディレクトリ下のテンプレートを指定して出力
    • :file
      • アプリケーション外のテンプレートを使用する際に絶対パスで指定

render_to メソッド

  • コントローラ小野アクションないで使用するアクション実行後に他のルートへリダイレクトする
  • HTTPレスポンス(302)を受けたクライアントが次のHTTPリクエストを発生させ次のアクションを実行する
  • redirect_to メソッドのオプション
    • notice
      • リダイレクト先に通知メッセージを表示させるためのオプション
    • alert
      • リダイレクト先に警告メッセージを表示させたい時に使用
    • flash
      • 任意のハッシュパラメーターを使って、リダイレクト先へ値を渡すためのオプション
  • redirect_back
    • 直前に実行したアクションへリダイレクトする
  • url_for メソッド
    • 目的のコントローラーのアクションへのURLを動的に生成する

セッション情報の制御とクッキーの利用

  • HTTPセッションとはクライアントのブラウザーとWebサーバー間での接続関係
  • セッションが保たれている間、一続きの通信を行える
  • セッションは最大4KBの情報を保持できる
  • rails では session パラメーターとしてコントローラーで扱うことができる
  • session 情報を削除するには nil を入れるか delete メソッドを使用する
  • セッションを保存する場所(セッションストア)はデフォルトではクッキーに保持される
    • クッキーストア
      • クライアントのWebブラウザー内のメモリ
      • クライアント側に持っているので改竄の恐れがある
    • キャッシュストア
    • Active Recordストア
      • データベースのsessions Table
    • Redis ストア
      • Rails サーバーを使用するキャッシュストア
  • セッションストアはconfig/initializersディレクトリにsession_store.rbを作成して設定する
  • キャッシュストアやActiveRecordストアなどの場合、クッキーには暗号化されたセッションidのみが保存される
    • クッキーを使用したセッション情報はブラウザを終了するなどHTTPセッションを終了させると消える
  • expire_afterオプションを使用することでブラウザーを閉じてからもセッション情報を保持できる

目的に合わせた出力フォーマットの制御

  • renderメソッドでフォーマットを指定できる
  • json, xml

respond_toメソッドの役割

  • データフォーマットを判断し、ブロック内で指定された形式に合わせて処理を実行する
  respond_to do |format|
    ...
  end

フィルター

  • アクションの前処理、後処理を行うもの
  • before_action, after_action, around_action
    • around_action で指定する場合、アクションの位置を around_action のメソッドないで yield で設定する必要がある
    • skip_before_action などのスキップ機能もある

      HTTP認証機能とフィルターの活用

  • BASIC認証: http_basic_authenticate_withメソッド
    • 暗号化されていない
  • ダイジェスト認証: authenticate_or_request_with_http_digestメソッド
    • MD5方式のハッシュ形式で暗号化