【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テーブルに保存できるようにました。

 

このようにしてデータの保存の際には

ストロングパラメーターとプライベートメソッドを使って保存するデータを制限しましょう。