0

これは 2 部構成の質問です

Activerecord/Rails 初心者です。以下のアクティブレコードクエリを実行すると、

results = A.joins(:b).group(:id, :status).count

この結果から、出力を後処理して、エンティティを使用して結果を表示したいと思います。

{[1, "action1"]=>2, [1, "action2"]=>2, [1, "action3"]=>1, [2, "action3"]=>2}

[{'id' => 1, 'action1' => 2, 'action2' => 2, 'action3' => 1}, {'id'=>2, 'action3' => 2, 'action1' => 0, 'action2' => 0} ]

(予想される出力の 2 番目のハッシュでは、 と を追加action1 => 0しましaction2 => 0た。これは、0 が既定値である必要があるためです。)

上記の出力を達成する方法は?後処理自体なしでクエリの出力を表示できるかどうかはわかりません。これまで試した

summaries.map {|k,v| {k[0] => {k[1] => v}}}.reduce {|acc, h| (acc || {}).deep_merge(h)}

期待される結果を得るには、上記の map-reduce コードを変更する必要があります。

予想される応答は次のようになるはずです。そのため、クエリの出力の後処理に焦点を当てています。

[
 { 'id' => value
   'action1' => count,
   'action1' => count,
   'action1' => count
 },
 {
  # same structure as above
 }
]

たとえば、レールコンソールの id フィールドのみを公開しようとしていますが、エラーが発生します

class klassEntity < Grape::Entity
  expose :id
end

私が試したとき

klassEntity.represent([{'id' => 1, 'action1' => 2, 'action2' => 2, 'action3' => 1}, {'id'=>2, 'action3' => 2, 'action1' => 0, 'action2' => 0} ])

これは(Object doesn't support #inspect) 何が間違っているのですか?

アップデート

現在の出力から配列のリストを作成することで、これを機能させました

summaries.map {|k,v| {k[0] => {k[1] => v}}}.reduce {|acc, h| (acc || {}).deep_merge(h)}

各配列要素にはシンボルのハッシュが含まれています。これはレールコンソールでも機能しました。ここに到達するための最適な方法があるかどうか疑問に思っています。

4

1 に答える 1