1:ストロングパラメーター
ストロングパラメーターを使用する理由は、意図しないデータベースの読み書きを防ぐためです。
仮に全てのパラメーターを受け取る仕様の場合、悪意のあるパラメーターによって第三者にデータを改竄されてしまうなど、セキュリティ上の欠陥を作り出してしまう恐れがあります。最悪の場合、ユーザーへ不利益を与えてしまう事態へと繋がる可能性もあります。
このような状況を回避するためには、ストロングパラメーターを使用して受け取るパラメーターを制限することが大切です。
ストロングパラメーターの定義には、requireメソッドと、permitメソッドを組み合わせて使用します。
2:requireリクワイアメソッド
送信されたパラメーターの情報を持つparamsが、使用できるメソッドです。
requireメソッドは、パラメーターからどの情報を取得するか、選択します。
ストロングパラメーターとして使用する場合は、主にモデル名を指定します。
【例】require
params.require(:モデル名) # 取得したい情報を指定する
params[:モデル名]としても同じ情報を取得できますが、requireメソッドを使うことで、意図しないパラメーターであった場合にエラーとして返すことができ、原因特定やユーザーにエラーを示すなどの対応ができます。
requireメソッドによって必要なパラメーターのほとんどを取得できますが、取得するパラメーターをより意図したものだけに制限するため、permitメソッドを使用して、カラムに保存したいデータのみに絞りましょう。
3:permitパーミットメソッド
requireメソッドと同様に、paramsが使用できるメソッドです。
permitメソッドを使用すると、取得したいキーを指定でき、指定したキーと値のセットのみを取得します。
【例】permit
params.require(:モデル名).permit(:キー名, :キー名) # 取得したいキーを指定する
4:記述例
private
def tweet_params
params.require(:tweet).permit(:name, :image, :text)
end