ストロングパラメーター
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)を追加できるようになる。
・参考
この記事が気に入ったらサポートをしてみませんか?