Highcharts - массив Rails содержит пустые записи даты - PullRequest
1 голос
/ 23 ноября 2011

Я работаю над приложением Rails 3.1.1 с панелью управления различными линейными графиками, используя Highcharts. Я реализовал пример кода в Railcast 223 (highcharts) - и все работает как положено. Но в дни, когда нет записей, массив отображает значение 0 - но я только смотрю на фактические записи линейного графика.

Это не проблема с Railscast, потому что в их выборке есть несколько записей Order каждый день. Похоже, это та же проблема, опубликованная другим пользователем (Томас) ... хотя его код не работал в моей ситуации.

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

Любой вклад был бы очень признателен - новичок в рельсах и уже нашел 100 способов не работать! Спасибо!

1 Ответ

1 голос
/ 23 ноября 2011

Если вы хотите, чтобы ничего не отображалось , а дата все еще появлялась, тогда измените все нули на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...