Rails 5.1、chartkick 多种货币的总和

Rails 5.1, chartkick a sum with multiple currencies

我遇到了一个关于 chartkick 的小问题。我有一个铁路应用程序,您可以在其中创建不同的货币。然后,您可以创建一个带有标题、金额并从列表和 user_id 中选择货币的费用。这种关系已经建立并且正在运作。我的用户控制器中有这样的东西:

@user_spendings = @current_user.spendings.all.order('date DESC').paginate(:page => params[:page], :per_page => 15)

@sums_by_currency = Currency.joins(:spendings).
  select(:symb, 'SUM(spendings.amount) AS amount').
  where(spendings: { id: @user_spendings.map(&:id) }).
  group(:symb)

在我的显示视图中(因为我希望每个用户的费用都显示在那里)是这样的:

    <% @sums_by_currency.each do |currency| %>
       <%= '%.02f' % "#{currency.amount}" %> <%= "#{currency.symb}" %>
    <% end %>

这显示了每笔支出的总和,具体取决于货币。
我想使用这个总数并使用 chartkick 来显示支出,以及创建此支出的日期。
我已经尝试了很多东西
首先,我只是为了看看:

<% @sums_by_currency.each do |currency| %>

  <%= bar_chart currency.amount %>

<% end %>

好吧,我必须要显示图表,但什么也没有显示。也许循环不是解决方案。然后我想到了 .map 但我真的不知道如何把它放在最诚实的地方。
我也试过了:

<%= line_chart  @current_user.spendings.group(:date).sum(:amount)  %> 

这显示了所有货币的总支出。我必须找出如何在不同图表中拆分所有货币并仅显示每种货币的总金额。

如果有人能给我线索,我将不胜感激。

非常感谢。

是的,您需要将一组数据传递给图表,而不是单个图表的大量单个数据(即您通过循环获得的数据)。使用 map 将您的货币对象转换为它们的数量是有意义的,例如

<%= bar_chart @sums_by_currency.map{|c| c.amount } %>

或者如果您需要一个类似这样的名称:

<%= bar_chart @sums_by_currency.map{|c| {name: c.unit, data: c.amount} } %>

其中 unit 是任何货币单位,例如 AUD

好的,我明白了!
只花了我2天...
对于对这里的答案感兴趣的人,我就是这样做的。实际上我没有改变控制器中的任何东西,我让 @sums_by_currency 保持原样。
相反,我选择了:

<%= column_chart @current_user.spendings.all.joins(:currency).group('currencies.symb').group_by_month(:date, format: "%B %Y").sum(:amount) %>

给我从我加入我按symb分组的货币的current_user的所有支出。然后我按月对所有内容进行分组,然后从金额中得出总和。