2012-05-24 5 views
5

Estoy muy confundido sobre lo que podría estar yendo mal.Hora no actualizada en heroku

He iniciado sesión en heroku run console e intento actualizar una marca de tiempo en mi base de datos.

me he encontrado User.find(6) ver que el usuario tiene un :next_click = 2000-01-01... no sé qué es ese valor, pero de todos modos, yo User.update 6, {:next_click => Time.utc(2015)} y parece que actualizará correctamente diciendo 2015-01-01 00:00:00, sin embargo cuando lo haga otra User.find(6) parece el tiempo ha cambiado porque no es 2015-01-01 00:00:00.

Estoy realmente confundido por qué no lo es. ¿Alguna idea?

ver adjunto PANTALLA enter image description here

irb(main):033:0> User.update 6, {:next_click => Time.utc(2015) } 
    User Load (34.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 6]] 
    (1.8ms) BEGIN 
    (2.2ms) UPDATE "users" SET "next_click" = '2015-01-01 00:00:00.000000', "updated_at" = '2012-05-24 00:13:26.197358' WHERE "users"."id" = 6 
    (2.2ms) COMMIT 
=> #<User id: 6, name: "mazlix", gold: 10, points: 10, next_click: "2015-01-01 00:00:00", created_at: "2012-05-23 23:40:39", updated_at: "2012-05-24 00:13:26"> 
irb(main):034:0> User.find(6) 
    User Load (2.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 6]] 
=> #<User id: 6, name: "mazlix", gold: 10, points: 10, next_click: "2000-01-01 00:00:00", created_at: "2012-05-23 23:40:39", updated_at: "2012-05-24 00:13:26"> 

Lo mismo sucede con u = User.find(6)u.next_click = Time.utc(2013) continuación u.save

irb(main):001:0> u = User.find(6) 
    User Load (38.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 6]] 
=> #<User id: 6, name: "mazlix", gold: 10, points: 10, next_click: "2000-01-01 00:00:00", created_at: "2012-05-23 23:40:39", updated_at: "2012-05-24 00:57:28"> 
irb(main):002:0> u.next_click = Time.utc(2013) 
=> 2013-01-01 00:00:00 UTC 
irb(main):003:0> u 
=> #<User id: 6, name: "mazlix", gold: 10, points: 10, next_click: "2013-01-01 00:00:00", created_at: "2012-05-23 23:40:39", updated_at: "2012-05-24 00:57:28"> 
irb(main):004:0> u.save 
    (10.9ms) BEGIN 
    (3.7ms) UPDATE "users" SET "next_click" = '2013-01-01 00:00:00.000000', "updated_at" = '2012-05-24 03:05:46.059530' WHERE "users"."id" = 6 
    (2.2ms) COMMIT 
=> true 
irb(main):005:0> u 
=> #<User id: 6, name: "mazlix", gold: 10, points: 10, next_click: "2013-01-01 00:00:00", created_at: "2012-05-23 23:40:39", updated_at: "2012-05-24 03:05:46"> 
irb(main):006:0> User.find(6) 
    User Load (33.0ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 6]] 
=> #<User id: 6, name: "mazlix", gold: 10, points: 10, next_click: "2000-01-01 00:00:00", created_at: "2012-05-23 23:40:39", updated_at: "2012-05-24 03:05:46"> 

app/models/user.rb:

class User < ActiveRecord::Base 
    attr_accessible :gold, :name, :next_click, :points 
end 
+0

la captura de pantalla adjunta es ilegible. por favor, copiar y pegar texto en un tamaño que puede ser leído. –

+0

lo sentimos, he incluido el texto ... – mazlix

+1

Podría haber una desencadenar sobre la mesa anulando las actualizaciones que está haciendo? –

Respuesta

6

Has creado una columna de tiempo. Ligeramente confuso, aunque en ruby ​​Time almacena hora + fecha, en el mundo de la base de datos existe el concepto de tiempo puro del día (es decir, solo horas/minutos/segundos) y eso es lo que se obtiene al agregar una columna de tipo: hora a tu migración

Ruby en sí no tiene una clase que representa un tiempo sin una fecha, por lo que rails usa una instancia de Time pero ignora el bit de fecha.

Si desea una columna que almacena tanto tiempo y fecha, cambiar la columna a una: fecha y hora de un (todavía tendrá una instancia Time de vuelta en la mayoría de los casos

1

En su ActiveRecord puede utilizar el tipo de datos. :timestamp o :datetime para almacenar el formato de fecha correcta.

Cuestiones relacionadas