首页 文章

Rails 5.1,用多种货币计算一笔款项

提问于
浏览
0

我遇到了关于chartkick的一个小问题 . 我有一个铁路应用程序,您可以创建不同的货币 . 然后,您可以使用 Headers ,金额创建费用,并从列表和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 %>

好吧,我必须出现图表,但没有任何显示 . 也许这个循环真的不知道如何把它放到适当的地方 .
我试过这个:

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

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

如果有人能给我一个线索我会很感激 .

非常感谢 .

2 回答

  • 0

    好的家伙,我明白了!
    我只花了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

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

相关问题