Help us understand the problem. What is going on with this article?

今更だけどRails4から実装されたStrongParameterをまとめてみる

More than 3 years have passed since last update.

はじめに

Rails3系からさすがに脱出しないとね、ということでRails3系とRails4系の違いについてよく調べる今日この頃。
そこで出てきたStrongParameterについて、なるほどと思ったのでまとめてみます。

Strong Parameterとは

MassAssignment機能を使う時に起こるかもしれない脆弱性に対する対策の1つ。

じゃあ、MassAssingmentとは?
これは、モデルの生成や更新の時にRubyのHashura酢を使って一括で属性を設定できる仕組み。
要は、更新する属性を書き換えた後にuser.saveってするのではなく、user.updateを使って一括更新する方法のことを指すらしい。

複数の属性の設定をカンタンにかける一方で、意図しない属性の変更を一般のユーザができてしまうので、脆弱性につながる。

例えばこんなメソッドがあった時↓

def update
  user = current_user
  user.update(params[:user])
end

このパラメータに不正なユーザの名前やパスワード、メールアドレスなどを送付してきた場合、意図しないユーザのデータが上書きされてしまう。
これを防ぐためにStrong Parameterを使います。

Strong Parameterの使い方

いきなり例を書くとこんな感じで使う↓

def update
  user = current_user
  user.update(user_params)
end

private
  def user_params
    params.require(:user).permit(:name, :email)
  end
end

このようにuser.updateの引数はparams[:user]ではなく、privateに設定したuser_paramsというメソッドの返り値を設定するようにする。
user_paramsメソッドの中では、まず、.require(:user)で:userというkeyをもつもの確認し、.permit(:name, :email)で更新をしてもいい属性を指定することができる

おわりに

まだ理解しきれていない部分が多いので、そのうち追記すると思います。
今回はパーフェクトRuby on Railsを参考にまとめました。

Ayaka14
エンジニアとして働いてます。メインはRuby on Rails。エンジニア以外のことも幅広くできるようになりたいな。。
atrae
People Techカンパニーとして、転職サイトGreen, ビジネスマッチングアプリyenta, 組織改善プラットフォームwevoxなどのサービスを運営。全ての社員が誇りを持てる組織と事業の創造にこだわり、関わる人々がファンとして応援したくなるような魅力ある会社であり続けることを目指しています。
https://atrae.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away