Ruby on rails Rails 5.1,使用多种货币进行计算
我被一个关于沙特基克的小问题缠住了。我有一个铁路应用程序,你可以创建不同的货币。然后,您可以创建一个带有标题、金额的费用,并从列表和用户id中选择货币。这些关系是建立和工作的。我的用户控制器中有如下内容:Ruby on rails Rails 5.1,使用多种货币进行计算,ruby-on-rails,loops,sum,ruby-on-rails-5,chartkick,Ruby On Rails,Loops,Sum,Ruby On Rails 5,Chartkick,我被一个关于沙特基克的小问题缠住了。我有一个铁路应用程序,你可以创建不同的货币。然后,您可以创建一个带有标题、金额的费用,并从列表和用户id中选择货币。这些关系是建立和工作的。我的用户控制器中有如下内容: @user_spendings = @current_user.spendings.all.order('date DESC').paginate(:page => params[:page], :per_page => 15) @sums_by_currency = Curre
@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 %>
在我的show视图中(我希望每个用户的费用都显示在那里),类似这样:
@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
是的,您需要将一组数据传递到图表,而不是单个图表的大量单独数据(即循环中的数据)。使用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
好的,伙计们,我知道了只花了我两天时间…
对答案感兴趣的人,我就是这么做的。实际上,我没有改变控制器中的任何内容,我让
@sums\u按货币按原样运行。
相反,我选择了:
<%= column_chart @current_user.spendings.all.joins(:currency).group('currencies.symb').group_by_month(:date, format: "%B %Y").sum(:amount) %>
请提供我加入symb分组货币的当前_用户的所有支出。然后我把所有的东西按月份分组,从金额中得到总数。好了,伙计们,我知道了
只花了我两天时间…
对答案感兴趣的人,我就是这么做的。实际上,我没有改变控制器中的任何内容,我让@sums\u按货币按原样运行。
相反,我选择了:
<%= column_chart @current_user.spendings.all.joins(:currency).group('currencies.symb').group_by_month(:date, format: "%B %Y").sum(:amount) %>
请提供我加入symb分组货币的当前_用户的所有支出。然后我按月份对所有内容进行分组,然后从金额中得到总数。我在文档中找到了这个多序列,看起来像这样:
或这样:
。有了这个,我在同一张图表上得到了几行。这可能是我目前处境的诀窍。我得再深入一点。如果这里有人能证实这是真的;)我在文档中找到了这个多序列,它看起来像这样:
或这样:
。有了这个,我在同一张图表上得到了几行。这可能是我目前处境的诀窍。我得再深入一点。如果这里有人能证实这是真的;)嘿,塔林,我试过你的代码,它几乎可以工作了。我有一张显示了我创建的两种货币的图表。但金额没有出现,我猜这是因为没有日期作为参考。所以我试着这样做:
但是图表没有加载。。。可能是因为我没有在控制器的@sums\u by\u货币中选择日期。我会尝试一些东西在这里,但有一个改进,谢谢!如果您有任何其他想法,请放心:)我也尝试过这样做:
,但没有成功,因为我在刷新时有这样的想法:未定义的方法“按周分组”20:Fixnum
。。。。嗯,我真的不知道,我只是在想一些事情,实际上这是行不通的。因为我的@sums\u by_currency
已经在计算控制器中当前用户的总金额。在我的图表中,我想按货币和月份列出每一笔支出。所以我想这是很好的得到所有的货币,但我必须研究一个新的变量,我想收集其余的信息。我现在有了:
。除了我还得找出如何把:currency_id改成符号你说得对,塔林。我在货币表中有名称和符号作为列。很好,我会试试。拔,从来没用过,也不知道。我打一针,谢谢;)嘿,塔林,我试过你的代码,它几乎可以工作了。我有一张显示了我创建的两种货币的图表。但金额没有出现,我猜这是因为没有日期作为参考。所以我试着这样做:
但是图表没有加载。。。可能是因为我没有在控制器的@sums\u by\u货币中选择日期。我会尝试一些东西在这里,但有一个改进,谢谢!如果您有任何其他想法,请放心:)我也尝试过这样做:
,但没有成功,因为我在刷新时有这样的想法:未定义的方法“按周分组”20:Fixnum
。。。。嗯,我真的不知道,我只是在想一些事情,实际上这是行不通的。因为我的@sums\u by_currency
已经在计算控制器中当前用户的总金额。在我的图表中,我想按货币和月份列出每一笔支出。所以我想得到所有的货币是很好的,但是我必须研究一个新的变量,我想收集剩下的信息。好吗