【Rails】ネストした配列の中にハッシュを作成【メモ】

8034 ワード

目的

  • 以下のようなJSONを作成したい
    • 企業情報の中に複数のエリアが存在し、エリアの中に複数の事業所が存在する場合
    • 配列の中にハッシュを作成
サンプル

    {
        "企業ID": 9706,	
        "エリア": [
            {
                "ID": 15610,
                "エリア名": "京都エリア",
                "事業所": [
                    {
                        "id": 25497,
			"事業所名": "京都支店1",
                    },
                    {
                        "id": 84455,
			"事業所名": "京都支店2",
                    },
                ]
            },
            {
                "ID": 55359,
                "エリア名": "大阪エリア",
                "事業所": [
                    {
                        "id": 84460,
			"事業所名": "大阪支店1",
                    }
                ]
            }
        ],
    }

手順

整形サンプル
data = {}

# 会社(Corporation)→エリア(corporation_areas)→事業所(corporation_offices)という関連
corp = Corporation.preload([corporation_areas: :corporation_offices]).first

data[:"企業ID"] = corp.id


# 企業のエリアと事業所を抽出
corp.corporation_areas.each_with_index do |area, area_idx|
	data[:"エリア"] << {
	"ID": area.id,
	"エリア名": area.area_name,
	"事業所": []
	}

	# エリア毎の事業所
	area.corporation_offices.each do |office|
		# area_idxを指定することが重要
		data[:"エリア"][area_idx][:"事業所"] << {
		  "id": office.id,
		  "事業所名": office.office_name,
		}
	end
end

respond_to do |format|
  format.json { render json: data }
end