LoginSignup
3
1

More than 1 year has passed since last update.

【Rails】ストロングパラメーターってなに???

Last updated at Posted at 2021-07-31

対象者

  • ストロングパラメーターに関して知りたい方
  • ストロングパラメーターの入力方法を知りたい方

目的

  • ストロングパラメーターのメソッド1つ1つの意味を考えながら使うこと

実際の手順と実例

1.ストロングパラメーターって??

結論から言うと、ストロングパラメーターとは、データ送信時に不正なリクエストによって予期しない値に変更されてしまう脆弱性(マスアサインメント脆弱性)を防ぐ仕組みです。

私個人的に不正アクセスを防ぐ仕組みくらいに考えています。

2.書き方

1.基本構文
private
def user_params
  params.require(:キー(モデル名)).permit(:カラム名1,:カラム名2,・・・).marge(カラム名: 入力データ)
end

以下は例になります

user_controller.rb

  def edit
   @user = User.find(params[:id])
  end

  def update
    @user = User.find(params[:id])
    if @user.update(user_params)
      redirect_to user_path(@user), notice: "You have updated user successfully."
    else
      render "edit"
    end
  end

  private

  def user_params
    params.require(:user).permit(:name, :introduction, :profile_image)
  end



2.private

privateは一種の境界線のようなもので、
「ここから下はControllerの中でしか呼び出せません」という意味を持ちます。

3.requireメソッド

引数にしたいキーを指定する場所
例では,(:user)に当たります。

キーの値に対するデータを抽出したい場合上記例のように書きます。

4.permitメソッド

許可された値のみを取得することができます。
permitに記載のないカラムは、保存や更新が実行されません。

5.ストロングパラメーターの呼び出し
user_controller.rb
 def update
    @user = User.find(params[:id])
    if @user.update(user_params)
      redirect_to user_path(@user), notice: "You have updated user successfully."
    else
      render "edit"
    end
  end

上記例のUpdateアクション抜粋です。
if文の(user_params)の部分でストロングパラメーターを呼び出しています。この他にもcreate,new等でこのように記述する場合が多いです。

参照

Rails4 | 新規・変更機能 | マスアサインメント機能と脆弱性とStrong Parameters

投稿者コメント

先日ストロングパラメーターに記載がないことが理由で作業が前に進まなかったので、このように記事にして改めて認識をまとめてみることにしました。

構文こぴぺして使っていただけると嬉しいです。

My Profile

プログラミング学習歴3ヶ月目のアカウントです!
プログラミングスクールで学んだ内容や自分が躓いた箇所等のアウトプットの為に発信しています。
また、プログラミング初学者の方にわかりやすく、簡潔にまとめて情報共有できればと考えています。
もし、投稿した記事の中に誤り等ございましたら、コメント欄でご教授いただけると幸いです。 

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1