Rails – モデルによるフォームデータの取得

 

前提

例題として以下のようなモデルを使う。

  • モデル名はuser
  • モデルのフィールドはnamepasswordの2つで、いずれもstring

手順

モデルインスタンスとフォームの準備

フォームを呼び出すコントローラーで、モデルインスタンスを準備する。

app/controllers/pages_controller

フォーム側で、そのインスタンスを引数にとる。

app/views/pages/params_check.html.erb

 

フォームデータの取得

パラメーター取得の考え方

モデルを介してフォームデータを取得する考え方は以下の通り。

  • paramsrequireメソッドでモデルを指定してパラメーターを取得
  • Railsの慣習として、上記の処理をprivateメソッドとする

params.require

以下のメソッドチェーンで、パラメーターのハッシュが得られる。

params.require(モデル名).permit(キー1, キー2, ...)

今回の例の場合は以下の通り。

params.require(:user).permit(:name, :password)

メソッド化

コントローラーにprivateで以下のメソッドを定義。

データの利用

パラメーターが必要な場合はこのメソッドを呼び出す。たとえばフォーム入力データをコンソールに出力する例として、

以下はフォーム入力のコンソールへの出力例。

permitの意味~ストロングパラメーター

モデルに寄らないフォーム入力の場合paramsは単純なハッシュだが、モデルを介した場合は、paramsにモデル名をキーとするパラメーターのハッシュが含まれる。

今回の例の場合のparamsの内容は以下の通り。

params[:user]をキーとしたハッシュを取り出すと、フォーム入力が得られる。

そして、この結果はrequire.permitを通した結果とほぼ同じ。

 

ただし最後のpermittedが異なり、paramsの場合はfalsepermit.requireを通した場合はtrueになっている。

permitted: falseの場合はデータを一度に保存するマスアサインメントが使用できない。これを許すと、悪意のあるユーザーが不適切なデータを追加して送信し、データベースに書き込まれてしまう恐れがある。

require.permitによる場合はあらかじめ取り扱い可能なデータが限定されているので、permitted: trueに設定され、マスアサインメントが可能となる。

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です