2014-02-13 2 views
13

У меня есть простая задача, когда я хочу взять дату начала и дату окончания и цикл по дням/датам. Этот код используется в моей задаче db: seed rake. В настоящее время мой код прошел следующие попытки.RoR, Невозможно перебирать DateTime/TimeWithZone

(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 я был бы очень благодарен.

ответ

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

Спасибо за ответ Криса. Мне пришлось немного побороться, тогда я прочитал, что Даты неизменны, и я был в пути. –

+0

У тебя это чувак. Удачи. –

2

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

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

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

0

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

1

Вы должны убедиться, что вы имеете дело с 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 
Смежные вопросы