我遇到了关于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) %>
这显示了所有货币的总支出。我必须找出如何拆分不同图表中的所有货币,并仅显示每种货币的总金额。
如果有人能给我一些线索我会很感激。
非常感谢。
答案 0 :(得分:1)
好的,我明白了!
我只花了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给我所有的支出。然后我按月对所有内容进行分组,然后从金额中得到总和。
答案 1 :(得分:0)
是的,你需要将一组数据传递给图表,而不是为单个图表传递大量单独的数据(即你在循环中获得的数据)。使用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