seeds run rails ruby-on-rails ruby datetime seeding

ruby on rails - run - RoR, no se puede iterar desde DateTime/TimeWithZone



seed rails 5 (4)

Tengo una tarea sencilla en la que quiero tomar una fecha de inicio y una fecha de finalización y un ciclo en los días / fechas. Este código se está utilizando en mi tarea de rastrillo de db: seed. Actualmente, mi código ha pasado por los siguientes intentos.

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

En cada caso, me sale un error como este.

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

Si alguien tiene alguna idea de cómo iterar en un intervalo de DateTimes, le estaré muy agradecido.


Debe asegurarse de que está tratando con un objeto Date (llamando a to_date ), luego todo funciona como se espera:

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

O con un rango:

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


No puedes iterar desde DateTime . Pero puede iterar cuando el inicio y el final del intervalo son instancias de Date . Convertirlos si es posible.

Y luego mira estos métodos de Date :

utilizar en lugar de each


Si desea iterar en el rango, puede considerar un bucle y un paso cada día usando algo como someModel.start_date + 1.day.to_i


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