【发布时间】:2011-12-27 13:40:05
【问题描述】:
我正在将 Highcharts 合并到我的 Rails 3/Ruby 1.8.7 项目中,使用 Railscast 第 223 集作为起点。
我正在尝试绘制用户在过去 4 周内的体重图表。有些日子用户可能不会输入他们的体重,我希望图表跳过这些日期。
我尝试使用这个 Stackoverflow 问题的答案:
Highcharts - Rails array includes empty date entries
但我遇到了 OP 提到的同样问题,因为重量值被分配给没有条目的日期。简而言之,没有权重的日期仍然被分配给找到下一个权重值的数组。
这是我图表系列选项中的代码:
series: [{
name: "Daily Weight",
pointInterval: <%= 1.day * 1000 %>,
pointStart: <%= 4.weeks.ago.to_i * 1000 %>,
data: <%= (4.weeks.ago.to_date..Date.today).map { |date| Weight.weight_on(date, current_user.id).to_f}.reject(&:zero?).inspect %>
}]
这是来自权重模型的 weight_on 函数:
def self.weight_on(date, user_id)
weight = Weight.find_by_entry_date_and_user_id(date, user_id)
unless weight.nil?
return weight.weight_entry
end
end
看起来正在发生的事情是在构建日期/权重数组时,日期被保留,直到返回权重值。然后在迭代到下一个日期之前将日期和权重(与数组中的日期不对应)添加到数组中。
我如何也拒绝约会?如果没有找到该日期的重量值,我该如何跳过该日期,确保它不会被添加到数组中,然后继续下一个日期?
感谢您的帮助!
【问题讨论】:
-
不完全是一个答案,而是一个建议:您应该创建一个日历表 [1] 并将您的数据留给它,而不是在您的应用程序中迭代日期并查询每天的数据库。 [1]sqlserver2000.databases.aspfaq.com/…
标签: javascript ruby-on-rails ruby ruby-on-rails-3 highcharts