Rails 5.1,用多种货币计算总和



我被困在关于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)  %> 

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

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

多谢。

好的,伙计们,我明白了!
只花了我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。然后我按月将所有内容分组,并从金额中得到总和。

是的,您需要将一组数据传递给图表,而不是单个图表的大量单个数据(即循环中得到的数据)。使用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

最新更新