現象
実行するとCan't mergeエラーが出力される。
Postmanで実行したときのレスポンス
"status": 500,
"error": "Internal Server Error",
"exception": "#<ActionView::Template::Error: Can't merge [{\"id\"=>1}, {\"id\"=>2}] into {\"id\"=>1, \"user_id\"=>1, \"barcode\"=>\"45019517\"}>",
rails-api/app/views/scan_histories/show_relations.json.jbuilder
json.extract! @scan_history,
:id,
:user_id,
:barcode
json.array! @scan_history_deposit_histories do |dh|
json.extract! dh,
:id
end
原因
JbuilderでJSON出力したときのJSON構造がおかしいため。
上記のJbuilderコードを無理やり出力した場合(実際にはできないが)、以下のようなJSON構造になる。id部分が構造としておかしい。
{
"id": 1,
"user_id": 1,
"barcode": "45019517",
{
"id": 1
},
{
"id": 2
}
}
対応
正しいJSON出力にする。
rails-api/app/views/scan_histories/show_relations.json.jbuilder
json.extract! @scan_history,
:id,
:user_id,
:barcode
json.deposit_histories do
json.array! @scan_history_deposit_histories do |dh|
json.extract! dh,
:id
end
end
出力結果
{
"id": 1,
"user_id": 1,
"barcode": "45019517",
"deposit_histories": [
{
"id": 1
},
{
"id": 2
}
]
}
「json.deposit_histories do 〜 end」でid部分をJSONの配列要素にして、正しいJSON構造になった。