ストロングパラメーターの基本的な書き方と対応できないオブジェクト例

なぜ記事を書こうと思ったか

Railsアプリ開発している際に、ストロングパラメーターで対応できないオブジェクトがあることを知った為、今回ストロングパラメータの基本的な書き方と一緒にこの記事にまとめようと思います。

ストロングパラメーターの書き方

基本的なオブジェクト

{
  name: "田中",
  age: 23
}
params.permit(:name, :age)

配列が入っている場合

{
  name: "田中",
  hobbies: [
    "サッカー", "映画鑑賞"
  ],
  age: 23,
  favorite_food: [
    "ラーメン", "寿司"
  ]
}
値に配列が入っているプロパティはストロングパラメーターで最後に記述する
params.permit(:name, :age, hobbies: [], favorite_food: [])

オブジェクトがネストした場合

{
  name: "田中",
  setting: {
    age: 23,
    department: "営業部"
  }
}
ネストしたプロパティもストロングパラメーターで最後に記述する
params.permit(:name, setting: [:age, department])

ストロングパラメーターで対応できないオブジェクトについて

ストロングパラメーターで全てのオブジェクトを対応している訳ではなく、直接、値を取得しないといけない場合もある。

二次元配列が入っている場合

{
  person: [
    "田中", "佐藤"
  ],
  setting: [
    [
      23, "営業部"
    ],
    [
      28, "開発部"
    ]
  ]
}
settingsをストロングパラメーターで取得しようとすると、エラーになる。
params.permit(person: [], setting: [[]])
settingsは直接取得する必要がある。
params.permit(person: [])
params[:setting]

最後に

正直、二次元配列のようにストロングパラメータで書く事ができないオブジェクトがあることは知りませんでした笑(開発中にたまたま見つけました)

もし他にストロングパラメーターで書くことができないオブジェクトや他のストロングパラメーターの書き方がある場合は、コメントで教えていただけると嬉しいです。読んで頂きありがとうございました。

参考資料