1
0

Rails7 ストロングパラメータ取得メソッドに画面入力された項目以外を追加する

Last updated at Posted at 2023-10-01

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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0