ストロングパラメーターとはデータベースが全てのパラメーターを受け取ることができる状態にしておくと、意図しないデーターベースの読み書きが起こってしまうことがありそれを防ぐためのもの。悪意あるパラメーターからによるデータの改竄などのセキュリティの欠陥を防ぎ、ユーザーを守ることにつながる。
ストロングパラメーターを使って保存するパラメーターに制限をかけることは重要。
ストロングパラメーターにはrequireメソッドとpermitメソッドがある。
requireメソッドは送信されたパラメーターを持つparamsが使用できるメソッド。
params.require(:対応したモデル名)
で定義できる。ストロングパラメーターとして使用する場合は主にモデル名を指定する。
これにより意図しないパラメーターをparamsが受け取った場合。エラーを返すことができ、原因特定のためにユーザーにエラーを示すことができる。
requireメソッドで必要なパラメーターを取得できるようになったが、さらにパラメーターを絞り込み、カラムに保存したい情報を指定することがpermitメソッドでできる。
permitメソッドはrequireメソッドと同じようにparamsが使用できるメソッド。
params.require(:対応したモデル名).permit(:取得したいキー名, :取得したいキー名)
で定義でき、例にあるように複数指定できる。
例えばTweetモデルで、name、image、text をデータベースで受け取りたい場合は、対応したコントローラーに
def create
Tweet.create(tweet_params) ←ここでTweetモデルを通して新しくパラメータを保存したいという記述。
end
private
def tweet_params
params.require(:tweet).permit(:name, :image, :text) ←受け取りたいパラメーターのキーを指定。
end
★privateメソッドは以下の記述がクラス外から呼び出されなくなるメソッド