ゆーかん

徒然日記

rails、ストロングパラメーターにおけるネストされた複雑なパラメータの処理

正確な内容は公式ドキュメントを参照

許可したかったparameter

{
  "nickname": "nickname",
  "info1": {
    "key1": "yes",
    "key2": "",
  },
  "info2": {
    "array1": ["aaa"],
    "array2":[]
  }
}

素直にkeyだけを列挙するのではエラーになる。 配列が存在する/ネストが生じている場合やたらとややこしくなり良く間違えるので注意が必要。

配列のpermitの仕方

配列がvalueになっているkeyのpermitは下記の様に行う。

def some_params
  params.permit(:name, {:array => []}
end

配列は、strong parameteが許可しているスカラー値ではないので、一旦ハッシュとして定義してあげます。

ネストが生じている場合

ネストが生じている場合は、ネストしているキーのバリューの中のキー(難しいな)に関しては、配列で定義してあげます。

def some_params
  params.permit(:name, array: [:key1, key2])
end

結論

初めにでてきたjsonを通すストロングパラメータの定義の仕方は次の様になる。

def some_params
  params.permit(:name, keys: [
    :nickname,
    {
      info1: [
        :key1, :key2
      ]
    },
    {
      info2: [
        { array1: [] }, { array2: [] },
      ]
    }
  ])
end

まとめ

配列 => ハッシュの中に格納して定義 ハッシュ => 配列に値のキーを格納して定義

ややこしいな。。