LoginSignup
2
1

More than 1 year has passed since last update.

【param is missing or the value is empty:】を個人的にまとめた。

Last updated at Posted at 2020-11-01

背景

DM機能の作成途中に、遭遇
Entryはチャットルームに入るユーザーを管理するためのテーブル
Roomはチャットを行うための中間テーブル

エラー内容

スクリーンショット 2020-10-25 19.00.47.png

entryにparamが存在しない、もしくはparamの値が空であることを指す。

解決した対応

①ストロングパラメータのrequireメソッドを削除
②permitメソッドのみ記載

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

フォームからデータを送信する際に、
「マスアサインメント脆弱性」と呼ばれるセキュリティ上の問題がある。
例えばデータ送信時のタイミングで不正リクエストが行われた場合、
そのデータが想定されるものと異なる恐れがある。

➡︎この脆弱性を防ぐための仕組みのこと。
各メソッドにあらかじめ登録や更新を許可するカラム名を指定することで、
もし許可外のカラムデータが送られてきた場合、判別して登録や更新アクションの対象から除外してくれる。

requireメソッド

params内の特定キーに紐付く値のみを抽出する。
引数には取り出したい値のキー名を指定しなければならない。

permitメソッド

許可されたカラムの値のみを取得する。
引数にはそのためのカラム名を指定しなければならない。
未許可のカラムがparams内に存在する場合、そのカラムデータは未取得扱いになり無視される。

mergeメソッド

ハッシュ(キーとバリューを持つ配列のこと)同士を結合する。
受け取ったparamsには含まれていないが、別に一緒に含めたい値がある場合など。

privateメソッド

各メソッドの呼び出しに制限をかける。
そのため、コントローラーからアクションとして認識されなくすることができる。

原因

requireメソッドが上手く機能していなかったように思われる。
RoomコントローラでEntryテーブルに保存されたデータを呼び出したかったのだが、
requireメソッドで指定すると、どうしてか動いてくれなかった。
重複していると認識されてしまったのだろうか。

参考記事

https://stackoverflow.com/questions/47391168/param-is-missing-or-the-value-is-empty-in-nested-resource-method
https://railsguides.jp/action_controller_overview.html#strong-parameters
https://qiita.com/kazuki13070311/items/cdd4917af204e00de001
https://qiita.com/takuyama/items/d0f1aa073a8e2e7212f2
https://qiita.com/Takka_Log/items/32dae78d7e3892e7b051
https://qiita.com/ozackiee/items/f100fd51f4839b3fdca8
https://qiita.com/akiupdate/items/514b107090c16a2e1b47
https://qiita.com/zenfumi/items/694edc863527f91c8976

2
1
2

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