如何填补表中日期条目之间的差距

时间:2017-01-27 18:51:34

标签: ruby-on-rails ruby

我在@dailylogs中有一组日期记录。

假设我在本月的第一天有一行(每日日志)。当我为15号添加新记录时,如何在每天之间添加空白条目,以便每月的每一天都有一个条目。

我可以计算两个日期之间的天数,以便在@dailylogs中循环检查两者之间的日期是否有条目....但我不能解决它。< / p>

由于

2 个答案:

答案 0 :(得分:0)

如果您有两个Date个对象非常简单。

require 'date'

from = Date.new(2017, 1, 1)
to   = Date.new(2017, 1, 5)

from.step(to).to_a
 => [#<Date: 2017-01-01 ((2457755j,0s,0n),+0s,2299161j)>, #<Date: 2017-01-02 ((2457756j,0s,0n),+0s,2299161j)>, #<Date: 2017-01-03 ((2457757j,0s,0n),+0s,2299161j)>, #<Date: 2017-01-04 ((2457758j,0s,0n),+0s,2299161j)>, #<Date: 2017-01-05 ((2457759j,0s,0n),+0s,2299161j)>] 

答案 1 :(得分:0)

我最后这样做了:

x = 1
day_range.times do
  if Dailylog.search_day(date_today.month, date_today.year, x, user).blank?
    create_date = DateTime.new(date_today.year, date_today.month, x)
    Dailylog.create(date: create_date, miles: "0", locations: "nil", user_id: user)
  end
  x+=1
end

使用:

def Dailylog.search_day(month, year, day, user)
where("cast(strftime('%m', date) as int) = ?", month)
.where("cast(strftime('%Y', date) as int) = ?", year)
.where("cast(strftime('%d', date) as int) = ?", day)
.where("user_id = ?", user)

它有效,但作为一个初学者,如果可以做得更好,就会乐于纠正。

THX。