ストロングパラメーター

1. ストロングパラメーターとは

 パラメータを受け取る際に、指定したキーを持つパラメータしか受けとれない様に制限できるもの。また、セキュリティー向上のために記述するもので、Web上から受けつけたパラメータが、本当に安全なデータかどうかを検証した上で、取得するための仕組み。

2. 書き方

def comment_params
   params.require(:キー(モデル名).permit(:カラム名1,:カラム名2,・・・)
   .merge(カラム名: 入力データ)
end

 例)

class CommentsController < ApplicationController 

 def create   
  comment = current_user.comments.build(comment_params)   
  if comment.save     
   redirect_to board_path(comment.board), success: t('default.message.created', item: Comment.model_name.human)   
  else     
   redirect_to board_path(comment.board), danger: t('defaults.message.not_created', item: Comment.model_name.human)   
   end 
 end

 private
 
 def comment_params
   params.require(:comment).permit(:body).merge(board_id: params[:board_id])
 end
 
end

・requireメソッド

登録したいのはどのテーブルのどのレコードなのか?という見解
今回は'comment'テーブルを指定

・permitメソッド

どの値(カラム)を認証するかを記述。
コメントの中身である':body'を指定して、この値を認可する。

・mergeメソッド

 掲示板にコメント機能を実装するに当たって、どの掲示板にコメントをしたのかを識別できるようにしなければなない。そこで、board_idカラムによって識別をしている。しかし、これは実際にユーザーがフォームから入力したものではない点で、ストロングパラメーターの役割である「パラメータを受け取る際に、指定したキーを持つパラメータしか受けとれない様に制限できるもの」に矛盾している。

 そこで、mergeメソッドを追記することで、パラメーターで受け取った値ではないが、ここにレコードを作成した際に追加したい値(board_id)を追加できるようになる。

・参考

【Ruby on Rails】ストロングパラメータとは何か? また記載方法は?

この記事が気に入ったらサポートをしてみませんか?