地味にめちゃくちゃ大事なストロングパラメータについて自身の備忘録として書いて行きたいと思います。
ストロングパラメータとは一体何?
指定したキーを持つパラメーターのみを受け取るように制限するものです。
ストロングパラメータを使用する理由は、
受け取る パラメーター を制限しなければ、仕様以外のパラメーターも使われてしまうためです。
この状態だと、意図しないデータの更新をされる可能性が発生します。
ストロングパラメータの定義には
requireメソッドと、permitメソッドを組み合わせて使用します。
requireメソッド
送信されたパラメーターの情報を持つparamsが、使用できるメソッドです。
requireメソッドは、パラメーターからどの情報を取得するか、選択します。
ストロングパラメータとして使用する場合は、主にモデル名を指定します。
params.require(:モデル名)
* 取得したい情報を指定する
* 基本はモデル名でそれ以外のキーも使うことが可能らしいです。
permitメソッド
requireメソッドと同様に、paramsが使用できるメソッドです。 permitメソッドを使用すると、取得したいキーを指定でき、指定したキーと値のセットのみを取得します。
params.require(:モデル名).permit(:キー名, :キー名)
*取得したいキーを指定する
permitメソッドでparams.requireの内容からキーを指定すると、それ以外のキーがあっても値を受け付けません。
実際にやってみたいと思います。
【例】
まずはcreateコントローラー内に
item_paramsを定義してあげます。
こんな感じに代入できます。
paramsの中身はターミナルやbinding.pryで確認可能です。
ストロングパラメータを使う際には、プライベートメソッドを使います。
privateメソッド
これは簡単に説明すると、クラス外から呼び出すことが不可になるメソッドです。
こちらでストロングパラメータの完成です。
これで特定のキーを受け取ることができるようになりました。
自分はまだまだ駆け出しエンジニアなので、間違った記述等ありましたら、ご指摘、ご教示のほどよろしくお願い致します。