railsでひとつのJSONで二つのテーブル分のデータを受け取った際の処理を書く際に手間取ったのでメモ。
受け取るJSONファイル
{
"category_id": 1,
"name": "TestEvent",
"is_public": true,
"description": "テストイベントです",
"proposed_at": [
"2022-11-14T18:15:45.087+09:00",
"2022-11-14T19:16:45.087+09:00",
"2022-11-14T18:52:09.671+09:00"
]
}
イベントの名前だったりそのイベントの候補日のデータ
コントローラー側の処理
def event_params
params.require(:event).permit(
:category_id,
:name,
:is_public,
:description,
:delete_at
)
end
def possible_dates_params
params.require(:proposed_at)
# params.permit(proposed_at: [])
# params[;proposed_at]
end
event_params
にはeventテーブルに入れるデータ、possible_dates_params
にはpossible_datesテーブルに入れるデータが入る。
コメントアウトされている書き方でも実装できるが2行目のparams[;proposed_at]
ではストロングパラメータにならないため要件的にどうなのと思い今回はパス。1行目のparams.permit(proposed_at: [])
は同じように実装できるが受け取る値が
{"proposed_at"=>[
"2022-11-14T18:15:45.087+09:00",
"2022-11-14T18:16:45.087+09:00",
"2022-11-14T18:52:09.671+09:00"
]}
って感じになってeach文とかで回すときにわざわざ
proposed_days = possible_dates_params
proposed_days[proposed_at].each do |proposed_at|
というような書き方になる。取り出す値、使う値が決まってるならできるだけそれだけ入れた方がいいよねって思い今回はparams.require(:proposed_at)
の方法で実装した。
もしJSONファイルのネストが深かったりハッシュのキーを使わないといけないならコメントアウトしてる書き方を採用したほうがいい時もあるかもしれない。
## 参考
https://zenn.dev/shogo_matsumoto/articles/1dd51149d088e6