ruby-on-rails - 时间不在 heroku 中更新

标签 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

最佳答案

您已经创建了一个时间列。有点令人困惑,尽管在 ruby​​ Time 中存储时间 + 日期,但在数据库世界中存在纯粹的一天中的时间(即小时/分钟/秒)的概念,这就是你添加时得到的一列类型:迁移时间。

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

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

关于ruby-on-rails - 时间不在 heroku 中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729618/

相关文章:

ruby-on-rails - 将字符串转换为标题大小写

ruby-on-rails - ActiveRecord::HasManyThroughAssociationNotFoundError

SQL 数据库设计 - 需要不同子表的类型表?

ruby-on-rails - 当我在 ruby​​ on rails 中生成迁移时,它会创建一个包含空方法的文件,为什么?

ruby-on-rails - 如何将来自 Twitter 的 Bootstrap 样式表与我在 Rails 中的现有样式表一起使用,而不会弄乱一切?

ruby-on-rails - 字符串中的两个变量

ruby-on-rails - 在 haml 中查找两个日期之间的范围

ruby-on-rails - will_paginate 未定义方法。 Will_paginate gem 似乎可以工作

javascript - 高效地从 Ruby on Rails 中的联接表中提取值以在 javascript 中使用

ruby-on-rails - 访问正确的数组值