【问题标题】:Highcharts - Rails array includes empty date entriesHighcharts - Rails 数组包含空日期条目
【发布时间】:2011-11-23 18:34:11
【问题描述】:

我正在开发一个 Rails 3.1.1 应用程序,该应用程序具有使用 Highcharts 的各种折线图的仪表板。我在 Railcast 223 (highcharts) 中实现了示例代码——一切都按预期工作。但是在不存在条目的日子里,数组会绘制一个 0 值——但我只是在寻找折线图的实际记录。

这不是 Railscast 的问题,因为他们每天都有多个订单条目。这似乎是另一位用户(Thomas)发布的相同问题......尽管他的代码在我的情况下不起作用。

Index view:

    $(function () {
  new Highcharts.Chart({
    chart: { renderTo: 'orders_chart' },
    title: { text: 'Orders by Day' },
    xAxis: { type: 'datetime' },
    yAxis: {
      title: { text: 'Dollars' }
    },
    tooltip: {
      formatter: function () {
        return Highcharts.dateFormat("%B %e %Y", this.x) + ': ' +
          '$' + Highcharts.numberFormat(this.y, 2);
      }
    },    
    series: [{
      pointInterval: <%= 1.day * 1000 %>,
      pointStart: <%= 3.weeks.ago.at_midnight.to_i * 1000 %>,
      data: <%= (3.weeks.ago.to_date..Date.today).map { |date| Order.total_on(date).to_f}.inspect %>
    }]
  });
});


    class Order < ActiveRecord::Base
  def self.total_on(date)
    where("date(purchased_at) = ?",date).sum(:total_price)
  end
end

任何意见都将不胜感激 - rails 新手并且已经找到了 100 种不起作用的方法!谢谢!

【问题讨论】:

    标签: ruby-on-rails highcharts


    【解决方案1】:

    如果您希望 nothing 被绘制但日期仍然显示,则将任何零更改为 javascript null。如果您不想绘制那些日子,那么您应该在输出之前从数组中拒绝它们。

    所以:

    (3.weeks.ago.to_date..Date.today).map{|date| total=Order.total_on(date).to_f; total.zero? ? "null" : total }.inspect
    

    或者:

    (3.weeks.ago.to_date..Date.today).map{|date| Order.total_on(date).to_f}.reject(&:zero?).inspect
    

    【讨论】:

    • 是的,我不想在那一天绘制图表;或者更确切地说,只用实际条目绘制天数。
    • 我使用了第二种方法“reject(&:zero)”,它消除了图中没有条目 0 的数据点。它确实将日期从他们的实际输入移动了大约 2 - 4 天......这没有任何意义。非常感谢,你帮了大忙!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2021-12-07
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多