##背景
DM機能の作成途中に、遭遇
Entryはチャットルームに入るユーザーを管理するためのテーブル
Roomはチャットを行うための中間テーブル
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