簡體   English   中英

在軌道中按日期循環遍歷對象

[英]Looping through objects by date in rails

我試圖遍歷客戶在日期范圍內創建的記錄,然后創建兩個數組以傳遞給Chart.js。 第一個數組是日期范圍內的每一天,第二個數組是給定日期內掃描的主機總數。

Chart.js正在尋找以下格式:

labels: ["3/11","3/12","3/13","3/14"] (一個基本數組) data: [12,13,14,55] (另一個基本數組)

在我的情況下, labels必須是給定范圍內的每個日期(我現在只是在14天范圍內對其進行測試;而數據將是給定日期內掃描的主機數量(可能為0)。

我可以很容易地掃描公司的總主機數:

count = 0
company.tests.each do |test|
  count += test.network_hosts.count
end

但自測試以來,我一直在努力使主機數與日期范圍保持一致

我的代碼正在運行,但是一天的計數減少了一個。 在這種情況下,某天(例如3/2)的結果顯示在3/1以下,依此類推。

dates = []
array = []
hit = 0
today = Date.today
tests = company.tests.where(date: today - 30..today).order(date: :asc)
(today - 30..today).each{|date| dates.push(date.to_s)}
dates.each do |r|
  hit = 0
    tests.each do |t|
      if t.date.strftime("%Y-%m-%d") == r
        hit = hit + t.network_hosts.count
      end
    end
    array.push(hit)
  end
  return array
end

=> [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

我對Chart.js收費的日期范圍數組如下所示:

today = Date.today
labels = []
(today - 30..today).each{ |date| labels.push(js_date_time_no_year(date))}
return labels

=> ["02/17", "02/18", "02/19", "02/20", "02/21", "02/22", "02/23", "02/24", "02/25", "02/26", "02/27", "02/28", "03/01", "03/02", "03/03", "03/04", "03/05", "03/06", "03/07", "03/08", "03/09", "03/10", "03/11", "03/12", "03/13", "03/14", "03/15", "03/16", "03/17", "03/18", "03/19"]

因此,第一個數組中的值17應該在位置14,而不是在位置13。 等等。 我可以通過返回31天來輕松地在代碼中對此進行調整,但是理想情況下,我希望用戶能夠單擊30/60/90天按鈕,而不必執行后端數學運算來將日期范圍加1。

我認為您應該保持簡單。 因此可以輕松擴展它,並提高代碼可讀性。

這是一個功能相同的代碼段

grouped_data = company.tests.joins(:network_hosts).where(date: 30.days.ago.to_date..Date.today).order(date: :asc).group_by {|test| test.date.strftime("%m/%d")}

現在

array = []
labels = []
(30.days.ago.to_date..Date.today).each do|day|
  label =  day.strftime("%d/%m")
  labels.push label
  array.push(grouped_data[label].try(:length) || 0)
end

在這里閱讀有關group_by的信息

grouped_data[label].try(:length) || 0 grouped_data[label].try(:length) || 0將返回在特定日期創建公司的實際網絡主機, grouped_data[label].try(:length) || 0則返回沒有創建公司的那些日子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM