Tengo un problema con las zonas horarias y un db postgresql (Rails 3.0.4, PostgreSQL 9.0). Estoy usando un ámbito personalizado, en el que añado algunas condiciones, hago combinaciones, etc.pp.Rails no convierte la zona horaria (PostgreSQL)
El problema es que los rieles no convierten los tiempos a mi zona horaria local. Este es el código del alcance:
scope :with_activities_within_range_in_week, lambda{ |latMin, lngMin, latMax, lngMax, date|
select("date_trunc('day', activities.starting_at) as date,
count(activities.id) as value
") \
.within(latMin, lngMin, latMax, lngMax) \
.joins(:activities) \
.merge(Activity.in_week(date)) \
.group("date") \
.order("date")
}
El contexto de los controles método para rangos, el alcance Activity.in_week devuelve esto:
where("activities.starting_at >= ? AND activities.starting_at < ?", start, stop)
Y en la instrucción de selección, quiero TRUNCAR la posición_inicial campo a día.
Me estoy poniendo la siguiente salida para el campo de fecha:
2011-04-07 18:48:32
2011-04-02 14:07:20
2011-04-02 14:06:49
Por desgracia, no incluye la zona horaria. Cuando intento acceder a mi modelo a través de las funciones "normales" Rails, funciona:
puts Activity.first.starting_at
-> 2011-04-15 06:47:55 +0200
Lo que estoy haciendo mal? ¡Espero que alguien pueda ayudar!
THX, esmoquin
¿Qué tipo es 'activities.starting_at' dentro de la base de datos? ¿Y qué sucede si 'seleccionas starting_at from activities' desde' psql'? –
El 'activities.starting_at' es un' timestamp sin una zona horaria' (almacenado en utc). 'select starting_at from activities' devuelve' 2011-04-15 04: 47: 34', también sin una zona horaria. Pero, ¿no deberían los rieles convertir el tiempo en la zona horaria específica sobre la marcha? Con mi ejemplo de mi pregunta 'pone Activity.first.starting_at -> 2011-04-15 06:47:55 + 0200' funciona. – 23tux
Encontré otra cosa interesante: cuando intento iterar sobre los resultados, y vuelco la clase de mi campo de fecha, obtengo 'String'. Pero debería ser 'ActiveSupport :: TimeWithZone'. Leí la documentación de postgresql, y 'date_trunc ('day', activities.starting_at)' debería devolver una 'timestamp'. ¿Por qué Rails no convierte esto? – 23tux