时间不在heroku更新

时间:2012-05-24 00:19:11

标签: ruby-on-rails ruby ruby-on-rails-3 postgresql heroku

我很困惑可能出现的问题。

我已登录heroku run console并尝试更新数据库中的时间戳。

我已经User.find(6)运行,看到用户有:next_click = 2000-01-01...我不知道为什么会有这个价值,但无论如何,我做User.update 6, {:next_click => Time.utc(2015)}并且似​​乎正确更新说2015-01-01 00:00:00,但是当我做另一个User.find(6)时,似乎时间已经转回,因为它不是2015-01-01 00:00:00

我真的很困惑,为什么不是。有什么见解吗?

查看附加的屏幕截图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">

u = User.find(6) u.next_click = Time.utc(2013)然后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

2 个答案:

答案 0 :(得分:6)

您已创建时间列。有点混乱,即使在ruby Time存储时间+日期,在数据库世界中存在纯时间(即只有几小时/分钟/秒)的概念,这就是当你添加一列类型:迁移的时间。

Ruby本身没有代表没有日期的时间的类,因此rails使用Time的实例但忽略了日期位。

如果您想要一个存储时间和日期的列,请将列更改为:datetime one(在大多数情况下,您仍会获得Time实例。

答案 1 :(得分:1)

在ActiveRecord中,您可以使用数据类型:timestamp:datetime来存储正确的日期格式。