Parameterはリクエストに含まれていてもよいパラメーターをコントローラーで指定する機能です。悪意のあるユーザーがフォームに存在していない属性の入力欄を追加してPOSTリクエストしてきても、その属性を弾くことができます。Parameterの挙動を理解するために前節のPOSTデータパラメーターを使って実験してみましょう。4より前のやり方を試してみます。ActiveModel::ForbiddenAttributesErrorこのように「params」をHashオブジェクトと同じようにモデルの複数属性の初期化に使うとエラーが発生します。それでは、「params」とは何でしょうか。Hash「params」はHashクラスを継承していますが、Hashではありません。これを用いて複数属性の初期化に用いるには次のようにメソッドチェインの返り値を使います。author「permit」メソッドの引数には初期化する複数の属性名を渡せます。そこに含まれていない属性がparamsに含まれていると上のようなログが出力されます。#<Book:0x007fc8d8781088>上記のように、作成・更新に使いたいパラメーターだけをpermitし、paramsからBookクラスのインスタンスを生成します。【2】リクエスト間でデータを保存する「クッキーとセッション」クッキーとセッションはリクエストの間でデータを保存する方法で、ログイン状態の管理などに使われます。クッキークッキーはユーザー側で一時的に保存されるデータです。セッションを使う上でもセッションIDをユーザー側で保存するために使われます。クッキーを保存するには次のように操作します。クッキーの有効期限}またクッキーを読み出すときはハッシュと同じようにします。nilセッションセッション、データをサーバーで保持し、そのデータを取り出すセッションIDをクッキーとしてユーザー側で保存します。セッションは次のように保存します。@user.id取り出すときはクッキーと同様です。1【3】簡単なメッセージを表示する「フラッシュ」フラッシュはデータの保存成功などの簡単なメッセージを表示する仕組みです。フラッシュはセッションに保存され、リダイレクトした先でも設定したメッセージを表示できます。“現在時刻:#{Time.now}”end表示するにはビューで次のようにして設定したキーで呼び出します。%></div>フラッシュはアクションが終了する際に削除されるため、以降のリクエストでは表示されません。「ActionController」には、アクションを実行する前後に前処理や後処理を挟むフィルターが用意されています。アクションの前に実行される「before_action」フィルター、後に実行される「after_action」フィルター、アクションの前後にまたがって実行される「around_filter」フィルターがあります。「scaffold」で作成したコントローラーでは次のようなフィルターが実装されています。endこのように「before_action」の宣言にフィルターの処理を行うメソッド名を渡して使用できます。メソッド名ではなくフィルター処理のブロックや、フィルターオブジェクトを渡すこともできます。フィルターオブジェクトは「before_action」に渡す場合であれば「before」メソッドか「filter」メソッド、「after_action」に渡す場合であれば「after」メソッドか「filter」メソッドにフィルターの処理を実装しておく必要があります。「around_filter」に渡す場合は「filter」メソッドまたは「around」メソッドにアクションの処理を埋め込む「yield」を含めて実装します。(以下略)また、フィルターの宣言時に「only」オプションでフィルターを実行するアクションを指定でき、「except」オプションで全てのアクションからフィルターを実行しないアクションを指定することもできます。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。