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
这样的东西进行循环和步骤。