toraMasa's blog

Railsガイドv6.0全部読む#4-1 Action Controllerの概要編

railsguides.jp

1 コントローラの役割

  • コントローラはモデルとビューの間を仲介する
  • リクエストを受け取り、適切な出力を行う

2 コントローラの命名規則

  • コントローラは複数形であることが望ましい
    • resourcesで一括ルーティングできる

3 メソッドとアクション

4 パラメータ

  • Railsではクエリ文字列パラメータとPOSTデータをどちらもparamsハッシュで取得できる
  • paramsでids=["1", "2", "3"]を渡すには、以下のようにする
GET /clients?ids[]=1&ids[]=2&ids[]=3
  • パラメータの値はすべて文字列
  • paramsにnilがあると自動で[]に置き換えられる
  • paramsではキーとしてシンボルも文字列も指定できる
  • config.wrap_parameters, wrap_parametersはじめて知った
    • ちょっとよくわからん
  • 4.3ルーティングパラメータどういう意味かわからない
  • default_url_optionsもはじめて知った
    • 'I18n.locale'ってなんや
  • requiredなパラメータないと400帰る
  • 'Person.create(params[:person])'これだめなんだ。
  • permitのとこに書くやつは許可済みスカラー値って名前らしい
  • Numericってなんや
  • TrueClass、FalseClassっていうのがあるの初めて知った
  • permit!は要注意。
    • 使われてるの見たこと無いけど。
  • ネストしたパラメータ複雑。
  • 4.5.3 その他の事例ようわからん

5 セッション

  • セッションはコントローラとビューのみ利用できる
  • セッションの保存先ストレージ全部初めて知った
    • デフォルトはCookieStore
    • セッションIDは必ずcookieで渡す
    • 正直セッションとCookieの意味よくわかってない
  • モデルインスタンスは基本的なRubyオブジェクトではない?
  • lazy_loadは理解したがeager_loadの意味を忘れた
  • メモ化ってなに
  • flash.keepって初めて知った

6 Cookie

  • Railsではcookieをhashのように扱える。
  • cookieに複雑なオブジェクトを保存するとJSONとして変換されないケースがあるので、できるだけ単純な値だけを保存するようにする。

7 XMLJSONデータを出力する

8 フィルタ

  • フィルタにはbefore, after, aroundがある
    • aroundはbeforeとafter両方で実行される
    • aroudでは必ずyieldを実行しないといけない
      • yieldってなんすか
  • 一般的にはprivateメソッドを定義して、そのメソッドをフィルタとして追加する
    • ブロックとして与えることもできる
    • sendメソッドを使うとprivateメソッドを呼び出せる
    • クラスを渡すならbeforeメソッド必要
      • beforeメソッドって初めて知った

9 リクエストフォージェリからの保護

  • リクエストフォージェリを防ぐ第一歩は、RESTful規則にそってアプリケーションを開発すること
  • リクエストの偽造から保護するには、すべてのリクエストに予測不可能なトークンを追加すること
  • formヘルパーを使っていたら心配ない。APIとかを作るときには気をつけないといけないと思うけど、あんま書いてない。書いて欲しい。

10 requestオブジェクトとresponseオブジェクト

11 HTTP認証

  • RailsではBASIC認証とダイジェスト認証がビルトインされている

12 ストリーミングとファイルダウンロード

  • send_data, send_fileメソッドでファイルを返せる
    • 前者は新しくファイルを作成する場合、後者は既存のファイルを返す場合に使う
    • PDFって文字列だったんだ
  • ただし利点はあんまない。publicフォルダに置いておいてwebサーバーからダウンロードさせる方が良い。
  • mixin = includeで使用すること
  • カラオケアプリを作る時はストリーミングを使う
    • むずい。ようわからん

13 ログをフィルタする

  • ログに出力したくない情報をフィルタリングできる
    • 使ったことないんだけど大丈夫なんだろうか。

14 Rescue

  • Procオブジェクトってなんぞや
  • rescue_fromにExceptionとかStandardErrorを指定しないほうが良い

15 HTTPSプロトコルを強制する

  • configで設定できる