LoginSignup
0
0

More than 1 year has passed since last update.

railsでJSONファイルの値を分割して受け取る

Last updated at Posted at 2022-11-16

railsでひとつのJSONで二つのテーブル分のデータを受け取った際の処理を書く際に手間取ったのでメモ。

受け取るJSONファイル

event.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"
	]
}				

イベントの名前だったりそのイベントの候補日のデータ

コントローラー側の処理

event_controller.rb
  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

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