RailsでAPIを作っています。そこで多対多の関連テーブルを外部結合してそれを加工して返しているのですが、
テーブル1 | テーブル2 |
---|---|
a | α |
a | β |
b | α |
b | γ |
と返されたものを結果として
[ {id: 1, name: a, table2: [{id: 1, name: a}, {id: 2, name: b}]}, ... ]
のように返したいです。
今の所、返ってきたActive Recordeを配列に変換したのち、まず主目的のテーブル1のidでグループ化。さらにその配列からそれぞれのグループの配列を作成して、最後に再度まとめるというコードを書いてるのですが、非常に可読性が悪いので困っています。
ruby
1model1 = left_outer_joins(:model2) 2.queries 3.select(" 4 model1s.*, 5 model2s.id: model2s_id 6") 7.to_a 8 9table1_keys = [:id] 10table2_keys = [:model2s_id: :id] 11 12groupd_model1 = model1.group_by {|m| m[:id]}.values 13model1s_info = grouped_model1s.map {|m| m[0].slice(*model1_keys)} 14model2s_info = model2s_info = grouped_model1s.map {|m1| m1.pluck(*model2_keys.keys).map {|m2| model2_keys.values.zip(m2).to_h}} 15 16model1s_info.map.with_index {|m, i| { 17 **m, 18 model2: model2s_info[i], 19}}
なにかもっと簡単に一度のクエリで扱いやすい形のデータを得る方法はないでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/19 14:25