Rails: Applying Strong Parameters to Nested Array JSON
フロントエンドで整形したJSONをRailsのエンドポイントで受け取る際に、Strong Parameterの設定で少しハマったので備忘録として記載
環境は以下
- Ruby 3.1
- Rails 6系
Strong Parameterの中で配列を扱う(文字列の配列)
参考)https://blog.ryskit.com/entry/2024/01/13/020409
requestのJSONの構造
{
"user": {
"stringArray": [
"aaa",
"bbb"
]
}
}
この構造に対してStrong Parameterを適用する場合、以下のように記述する。
配列であることを明示するだけで良い。
動作するStrong Parameter
params.require(:user).permit(stringArray: [])
Strong Parameterの中で配列を扱う(オブジェクトの配列)
requestのJSONの構造
{
"user": {
"objectArray": [
{ "id": 1,
"value1": true,
"value2": "aaa"
},
{
"id": 2,
"value1": false,
"value2": "bbb"
},
{
"id": 3,
"value1": false,
"value2": "ccc"
},
{
"id": 4,
"value1": true,
"value2": "ddd"
}
]
}
}
この構造に対してStrong Parameterを適用する場合、以下のように記述する。
プリミティブな中身の配列と異なり、配列の中のkeyまで明示的に指定しないとエラーとなる。
動作するStrong Parameter
params.require(:user).permit(objectArray: [:id, :value1, :value2])
エラーとなるパターン
# 配列の中のkeyを指定していない以下ではエラーとなる
params.require(:user).permit(objectArray: [])
複数の配列を扱う
以下を参考
https://qiita.com/sayama0402/items/576345a1f7d37571f5a6