RoR,无法从DateTime / TimeWithZone迭代

我有一个简单的任务,我想要开始日期和结束日期并循环日期/日期。 此代码正在我的db:seed rake任务中使用。 目前,我的代码经历了以下尝试。

(someModel.start_date.to_datetime..someModel.end_date.to_datetime).each { |x| puts x } ...... (someModel.start_date...someModel.end_date).each { |x| puts x } 

在每种情况下,我都会收到这样的错误。

 can't iterate from ActiveSupport::TimeWithZone or can't iterate from DateTime 

如果有人对如何迭代一系列DateTimes有任何线索,我将非常感激。

 start = someModel.start_date.to_datetime finish = someModel.end_date.to_datetime while(start < finish) do #bunch of awesome stuff start += 1.day end 

您必须确保您正在处理Date对象(通过调用to_date ),然后一切都按预期工作:

 start_date.to_date.upto(end_date.to_date) {|date| puts date } 

或者有一个范围:

 (start_date.to_date..end_date.to_date).to_a 

您无法从DateTime迭代。 但是,您可以在间隔的开始和结束时进行迭代,这是Date实例。 如果可能,转换它们。

然后看看这些Date方法:

  • 步()
  • 取决于()
  • 向下()

用而不是each

如果你想迭代这个范围,你可以考虑使用像someModel.start_date + 1.day.to_i这样的东西进行循环和步骤。