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 3 years have passed since last update.

【Ruby on Rails】ストロングパラメータについてbinding.pryで理解を深める 

Last updated at Posted at 2020-03-29

##この記事の目的
先日tech::campとういうプログラミングスクールを卒業しました
この学習を無駄にしないように理解が浅いところを復習する為に書きます
createアクションにストロングパラメータを設定せず、Post.create(params)とだけ書いて値の保存を試みたら、エラーが出たことがこの記事を書くきっかけです。

##1.ストロングパラメータについて
「Web上から入力されてきた値を制限することで、不正なパラメータを防ぐ仕組み」です。セキュリティ上の問題に対処するための仕組みとしてRails4系から導入されました。
参考 https://kirohi.com/strong_parameters_rails

##2.ストロングパラメータを設定する理由
簡潔にいうと管理者情報を乗っ取られないようにする為です。
本来ユーザーから送られてくることのないパラメータが存在していたとしても、それを取り除いて安全にDBの更新を行うことができます。
悪意のあるユーザーが管理者権限付きのユーザーを取得する為にパラメータを改竄しても、許可されたパラメーターだけに絞り込むことができます。
データの登録・更新機能に設定することが多いのもこの理由からです。
以下のquitaの記事が理解しやすいです。
参考 https://qiita.com/ozackiee/items/f100fd51f4839b3fdca8

privateメソッド以下に定義することが多い理由は、クラス内部からしか使わないので、クラス外部で呼び出されるとエラーが起きるようなメソッドが使われるのを防いで、さらにコードの可読性が上げる為です。

##4.ストロングパラメータを設定してbinding.pryで見てみる

まずはストロングパラメータの設定

post_controller.rb
def create
  Post.create(post_params)
end

private
def post_params
  params.require(:post).permit(:name, :image, :text)
end

投稿フォームで値を入力してbinding.pryでデバックしてみましょう。

ターミナル.png

[1]はparamsの中身をみています。permitted: falseと出ていますね。
値の取得に失敗しています。
でも、これでいいんです。
なぜfalseかというとストロングパラメータを設定しているからです。
ストロングパラメーター内に書いたpermitメソッドで指定したparamsしか保存しません。

続いて[2]でpost_paramsの中身をみています。
これはストロングパラメーター内に書いたpermitメソッドの返り値です。
こちらはpermitted: trueとなっています。

このようにbinding.pryでデバックすると入力されてきた値をちゃんと制限できていることがわかります。

##まとめ
ストロングパラメータについて備忘録として書いてみました。
間違った記述があればご指摘お願いします。

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?