0

Chartkick は素晴らしく、次のような非常にシンプルなことができます。

<%= column_chart Device.joins(:reviews).group(:brand).average(:average_rating) %>

次のような結果が得られます。

ここに画像の説明を入力

問題は、ラベルが chartkick に渡されないことです。これは、chartkick がチャートをレンダリングするために使用するものです。

Chartkick.ColumnChart("chart-5", {"#<Brand:0x00000008a3c048>":"78.8","#<Brand:0x0000000879e840>":"80.70000712076823","#<Brand:0x0000000853e9d8>":"81.11111111111111","#<Brand:0x000000082808e0>":"73.42857142857143"}, {});

それで、大きな問題は...どうすればこの非常に簡単なクエリ方法を使用して、チャート上のブランド名を取得できるでしょうか?

私は試した:

<%= column_chart Device.joins(:reviews).group(:'brand.name').average(:average_rating) %>

...そして無駄に他のバリエーション...

4

1 に答える 1

4

基本的に、クエリに小さな変更を加える必要がありました。

<%= column_chart Device.joins(:reviews).includes(:brand).group(:'brands.name').average(:average_rating) %>

次に、ブランド名ではなく平均評価でこれを再注文することになりました。

devices = Device.joins(:reviews).includes(:brand).group('brands.name').average(:average_rating)
arr = styles.to_a
arr.map! { |pair| [pair.first, pair.second.to_f] }
arr.sort! { |a, b| a.second <=> b.second }
@sorted_hash = ActiveSupport::OrderedHash[arr]

意見:

<%= column_chart @sorted_hash %>

ビンゴ:

ここに画像の説明を入力

于 2014-06-02T19:34:51.840 に答える