挨拶
こんにちは、プレイライフの熊﨑です!
来月友人の結婚式があるということで、自分の婚期について若干の不安を抱えています。
結婚はいつになるのやら、、、、
そんなことは置いといて、今日もアウトプットを行っていこうと思います!
本日はparamsメソッドについてです。
対象読者
- paramsメソッドの使用経験はあるが、なんとなく使っている方
paramsメソッドについて
paramsとはリクエストで送られてきた値を受け取るためのメソッドです。
送られるデータの種類
送られてくる情報には、「投稿フォームなどPOSTで送信されたデータ」と「検索フォームなどGETで送信されURLにクエリとして入るデータ」があります。
これらのデータを取得するのが、paramsメソッドの役目です。
使い方
以下のように書くことでカラム名の値を取得することができます。
params[:カラム名]
どのように使うのか?
URLから送られてきた情報をコントローラーで使用したいとき
具体例
ユーザーから以下のようなリクエストが飛んできている場合
https://hogehoge.com/users/12
def show
@user = User.find(params[:id])
end
# params[:id]で12を返す
投稿された情報をコントローラーで使用したいとき
具体例
def create
user = User.new(permit_params)
user.save
end
def permit_params
params.permit(:name)
end
permitメソッドを使用しているのはストロングパラメータにするためです。
カラムを取得しないでparamsメソッドを実行すると、フォームに入力した情報以外も取得できてしまいます。
そのため、User.new(params)のようにすると、悪意を持ったユーザーがフォームに入力されている以外の不正な値を投稿した際に、DBの値が更新されてしまう可能性が出てきます。(Rails4からは、permitメソッドで許可されていないパラメータはDBに保存できないようになっています。)
このような場合に備えて、ストロングパラメータにすることで、フォームに入力した情報以外を更新できないようにする必要があります。
まとめ
- paramsメソッドは投稿フォームやURLから送られてきたデータを取得するメソッド
- paramsで受け取った値を用いてDBを更新する場合には、strongパラメータにする必要がある。
参考記事
https://railsguides.jp/action_controller_overview.html
https://pikawaka.com/rails/params