This article shows how to create/update a record with adding parameters other than Strong Parameters.
環境情報&前提条件
- Ruby 3.2.1
- Rails 7.0.0
解決したい内容
- formを使って画面で入力された情報を元にレコードの新規作成/更新を行いたい。
- コントローラで受け取る情報については、StrognPrametersを使用して意図しない項目が設定されることを防ぎたい。
- 一方で、画面で入力された項目以外にパスパラメータやURLのクエリパラメータで指定された内容等を自由に追加したい。
解決手順
- StrongPrametersでparamsを取得した後に、自分が追加したい項目を
merge
して返すようにする。
# 例)Commentレコード作成時にパスパラメータで渡ってきたPostテーブルのIdを追加する場合
class CommentsController < ApplicationController
def create
# comment_paramsには"StrongParametesの内容+mergeした項目"が含まれる
comment = Comment.create(comment_params)
end
private
def comment_params
# StrognPrametersとしてはコメント本文(content)と添付画像(image)を許容する
permit_params = params.require(:comment).permit(:content, image)
# パスパラメータからpost_idを取得し、paramsにマージして返す
# 以下ではパスパラメータからpost_idを取得して設定している
permit_params.merge(post_id: params[:post_id])
end
end