ストロングパラメーターとは
まずパラメーターとは、渡される情報のことです。
ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るように
制限をかけたものです。
つまり「指定した情報のみちょうだいね」と制限をかけてくれます。
なぜこのストロングパラメーターが必要なのかというと、
以前のRailsは、送られてきたデータを全て保存することが実装によってはできたらしいです。
つまり改ざんされたデータを送信した場合も保存されてしまいます。
現在はストロングパラメーターを用いることで、許可していない不正な情報を
ブロックすることができるようになっています。
以下のコードを参照ください。
private
# ストロングパラメータ
def book_params①
params①.require②(:book).permit③(:title, :body)
end
end
①paramsメソッド
シンプルに言えば、「送られてきた値を受け取るためのメソッド」です。
formから送られてくる情報やデータはこのparamsの中に入っています。
つまりparamsとは、送られてくるデータを入れてる箱のようなものです。
formで送信されたパラメーター(=データ)は、paramsという箱の中に入れられ、
そのデータをコントローラーで受け取ります。
②requireメソッド
送られてきたデータの中からモデル名(ここでは:book)を指定することで、データを絞り込みます。
params内にはたくさんの情報、データが存在するので、その中からモデルに対応するキーを
取得してくれるのがrequireメソッドの役割です。
③permitメソッド
permit=その名の通り許可するメソッドです。
何を許可してくれるかというと、先ほどのrequireで絞り込んだデータの中から、
保存を許可するカラムを指定します。つまりpermitで指定されたキーのみが保存ができます。
これで誰かが悪意ある改ざんデートを送りこもうとしても、制限をかけているので防ぐことができます。
今回だとtitleとbodyしか受け取りませんよ、と指定していることになります。
上記をシンプルにまとめると
①paramsに格納されて情報が送られてくる→②requireメソッドでモデルに対応するキーを取り出す→
③その中から許可したデータのみpermitメソッドでゲットする
このような流れでストロングパラメーターがはたらくことによって、
book_params内で保存したいデータの絞り込みが行われるわけですね!
privateってなに?
ストロングパラメータの上に記述してあるprivateとは。
privateメソッドは一種の境界線で、「ここから下はコントローラーの中でしか呼び出せないよ」
という意味があります。
privateの下に記述することで、メソッドの呼び出しに制限をかけることができます。
private以下に定義されたメソッドは、アクションとして認識されなくなり、URLと対応
できなくなります。
逆にindexやshowなどの通常の7つのアクションをprivate以下に記述してしまうと、
indexアクション=/books/indexというURLとの紐付けに対応できなくなり、
エラーが発生してしまうので記述位置に注意してください。
:
:
private
:
end
他のアクション(indexやshowなど)を巻き込まないように
privateは一番下のendの上に記述しましょう。