【Rails】ストロングパラメーター/プライベートメソッド
ここではデータを保存する際に使用する機能、
ストロングパラメーターを紹介します。
強そうな名前ですね。
これは何かというと、
簡単にいうと「指定したキーをもつパラメーターだけを受け取るよう制限する」
ということです。
これ、制限しないと意図しないデータも更新されたりするのです。
他の人のパスワードを変更するパラメーターを送信すると
勝手に変更できてしまったり。これを防ぐためのものです。
このストロングパラメーターを使ってどのパラメーターを取得するか
指定するには、requireメソッドとpermitメソッドを使用します。
こうなります。
params . require ( : モデル名 ). permit ( : キー名, : キー名)
permitメソッドではキーを指定することができて、
その指定したキーと値をセットで取得します。
これではわかりにくいので、実際に値を入れてみましょう。
params . require ( : Post ). permit ( : image, : text)
これ通訳すると、
「paramsの箱から、postsテーブルのimageとtextのデータだけ取得するよ!」
となります。
Postモデルに紐づくのはpostsテーブルですよね。
requireメソッドのみを指定すると、
paramsに入ってる値はリクエストの内容によって様々です。
そこでpermitメソッドを使ってカラムに保存したいデータのみに絞りましょう。
そしてこれらの記述をメソッドとして定義しますが、
これまでとは違うプライベートメソッドとして定義します。
これはクラス外から呼び出すことができないメソッドのことです。
これを使う理由は2つ
①Class外から呼ばれたら困るメソッドを隔離
→エラーを起こすメソッドを予め隔離してエラーを防ぐ。
②可続性
→Class外から呼び出されたメソッドを探すときに、目を通さずに済むようになる。
では実際に定義してみましょう。
今回はデータを保存するときに使用するのでcreateメソッドを使用します。
def create
Post.create( post_params )
ここでプライベートメソッドに記載した内容を呼び出します。
end
private
def post_params
params. require( : post ). permit ( :name, :image, :text )
end
これでpost_paramsというストロングパラメーターを定義して
createメソッドの引数に使用しpostsテーブルに保存できるようにました。
このようにしてデータの保存の際には
ストロングパラメーターとプライベートメソッドを使って保存するデータを制限しましょう。