🙌

ストロングパラメーター

2021/01/17に公開

ストロングパラメーター
ストロングパラメーターとは、指定したキーを持つパラメーターのみを受け取るように制限するもの。
ストロングパラメーターを使用する理由は、受け取るパラメーターを制限しなければ、仕様以外のパラメーターも使われてしまうため。この状態だと、意図しないデータの更新をされる可能性が発生しまう。
たとえば、他人のログインパスワードを変更するパラメーターを追加で送信すれば、勝手にパスワードを変更できてしまう。これを回避するために、ストロングパラメーターを使用し、パラメーターを制限する必要がある。

requireメソッド
送信されたパラメーターの情報を持つparamsが、使用できるメソッド。requireメソッドは、パラメーターからどの情報を取得するか、選択する。ストロングパラメーターとして使用する場合は、主にモデル名を指定する。
params[:モデル名]としても同じ情報を取得できるが、requireメソッドを使うことで、意図しないパラメーターであった場合にエラーとして返すことができ、原因特定やユーザーにエラーを示すなどの対応ができる。

permitメソッド
requireメソッドと同様に、paramsが使用できるメソッド。permitメソッドを使用すると、取得したいキーを指定でき、指定したキーと値のセットのみを取得する。permitメソッドでparams.requireの内容からキーを指定すると、それ以外のキーがあっても値を受け付けない。

mergeメソッド
ハッシュを結合させるときに使用するRubyのメソッド。外部キーを取得するときに使う。

params.require(:モデル名).permit(:キー名, :キー名).merge(user_id: current_user.i)

プライベートメソッド
クラス外から呼び出すことのできないメソッドのこと。Rubyでは、privateと記述した以下のコードがプライベートメソッドになる。
メリット

  1. Classの外部から呼ばれたら困るメソッドを隔離
  2. 可読性

Discussion