0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ストロングパラメーターとParamsの復習

Last updated at Posted at 2022-11-08

ストロングパラメーターとは

まずパラメーターとは、渡される情報のことです。
ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るように
制限をかけたものです。
つまり「指定した情報のみちょうだいね」と制限をかけてくれます。

なぜこのストロングパラメーターが必要なのかというと、
以前のRailsは、送られてきたデータを全て保存することが実装によってはできたらしいです。
つまり改ざんされたデータを送信した場合も保存されてしまいます。
現在はストロングパラメーターを用いることで、許可していない不正な情報を
ブロックすることができるようになっています。

以下のコードを参照ください。

controllers/book_controller.rb
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との紐付けに対応できなくなり、
エラーが発生してしまうので記述位置に注意してください。

controllers/book_controller.rb
:
:
  private
:
end

他のアクション(indexやshowなど)を巻き込まないように
privateは一番下のendの上に記述しましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?