0
0

Rails ネストした配列のJSONに対してStrong Parameterを適用する

Last updated at Posted at 2024-09-06

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

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