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, я был бы очень признателен.


person Black Dynamite    schedule 13.02.2014    source источник


Ответы (4)


Вы должны убедиться, что имеете дело с объектом 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
person collimarco    schedule 30.09.2016

Вы не можете выполнить итерацию с DateTime. Но вы можете выполнять итерацию, когда начало и конец интервала являются экземплярами Date. Преобразуйте их, если это возможно.

А затем посмотрите на эти Date методы:

использовать вместо each

person vrybas    schedule 13.02.2014

Если вы хотите повторять диапазон, вы можете рассмотреть цикл и шагать каждый день, используя что-то вроде someModel.start_date + 1.day.to_i

person elixir    schedule 13.02.2014

person    schedule
comment
Спасибо за ответ Крис. Мне пришлось немного побороться, затем я прочитал, что даты неизменны, и я был в пути. - person Black Dynamite; 14.02.2014
comment
Ты понял, чувак. Удачи. - person Chris Barretto; 14.02.2014