0

基本上我有一个名为 ServerStatus 的模型,我需要创建一个对象以传递给谷歌图表。

ServerStatus Schema:
#  config_id    :integer
#  count        :integer
#  success      :boolean
#  failure      :boolean
#  generated_at :datetime

该对象需要采用以下格式:

data_table.add_row([ datetime, success, failure])

日期时间字段称为generated_at, 和success都是failure布尔值,每个都有一个关联的计数(单独的字段)。

我目前正在执行以下操作:

ServerStatus.find(:all, :conditions => {:config_id => options[:config_id], :success => true, :generated_at => options[:start_date].beginning_of_day..options[:end_date].end_of_day}, :order => 'generated_at ASC').each do |s|
ServerStatus.find(:all, :conditions => {:config_id => options[:config_id], :failure => true, :generated_at => options[:start_date].beginning_of_day..options[:end_date].end_of_day}, :order => 'generated_at ASC').each do |f|
        data_table.add_row([ s.generated_at.in_time_zone('Pacific Time (US & Canada)'), s.count, f.count])
      end
    end

这样做会添加两次 generated_at 时间,因此绘图的:failure => true图形不正确。如何选择所有位置success = true并将failure = true每个计数映射到generated_at时间,同时考虑到映射到时间时的空值。

4

1 回答 1

0

您可以运行两个单独的查询:
1) find all where success = true
2) find all where failure = true

然后将上述步骤返回的两个数组相加。

最后,遍历这个新形成的数组并填充您的 data_table。

我无法理解两个变量的需要:成功和失败。对于同一条记录,您能否同时获得真/假的成功和失败?我从您的 ServerStatus 的简短定义中得到了什么,我认为这不是真的必要。你可以很好地只用一个变量。

例子

server_status = ServerStatus.find(<your condition>)
server_status.each do |status|
 data_table.add_row([status.generated_at, server_status.success, !server_status.success])
end
于 2013-08-01T23:58:04.320 回答