2012-05-24 6 views
5

Ich bin ernsthaft verwirrt, was könnte schief gehen.Zeit nicht in Heroku aktualisieren

Ich bin in heroku run console eingeloggt und versuche, einen Zeitstempel in meiner Datenbank zu aktualisieren.

Ich habe User.find(6) laufen, um zu sehen, dass der Benutzer eine :next_click = 2000-01-01... hat, weiß ich nicht, warum es das Wert ist, aber wie auch immer, ich User.update 6, {:next_click => Time.utc(2015)} und es scheint richtig zu aktualisieren 2015-01-01 00:00:00 sagen, aber wenn ich eine andere User.find(6) es scheint Die Zeit ist zurückgeschaltet, weil es nicht 2015-01-01 00:00:00 ist.

Ich bin wirklich verwirrt, warum es nicht ist. Irgendeine Einsicht?

ANGEHÄNGTEM Screenshot 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"> 

Das gleiche geschieht mit u = User.find(6)u.next_click = Time.utc(2013) dann 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

Der beigefügte Screenshot unleserlich ist. kopieren und Einfügen von Text in einer Größe, die gelesen werden können. –

+0

Sorry, ich den Text aufgenommen habe ... – mazlix

+1

Könnte es sein, Trigger auf dem Tisch überschreiben die Updates, die Sie machen? –

Antwort

6

Sie haben eine Zeitspalte erstellt. Etwas verwirrend, obwohl in Ruby Time speichert + Datum, in der Datenbank Welt das Konzept einer reinen Tageszeit (dh nur Stunden/Minuten/Sekunden) existiert und das ist, was Sie erhalten, wenn Sie eine Spalte vom Typ hinzufügen: Zeit zu deine Migration

Ruby selbst hat keine Klasse, die eine Zeit ohne Datum darstellt, also verwendet rails eine Instanz von Time, ignoriert aber das Datumsbit.

Wenn Sie eine Spalte wünschen, die Zeit und Datum gespeichert, um die Spalte zu einem ändern: Datumzeit ein (Sie werden noch eine Time Instanz zurück in den meisten Fällen bekommen

1

In Ihrem Active kann den Datentyp verwenden. :timestamp oder :datetime das richtige Datum Format zu speichern.

Verwandte Themen