5

何がうまくいかないのか、私は真剣に混乱しています。

ログインして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です。

なぜそうではないのか、私は本当に混乱しています。何か洞察はありますか?

添付のスクリーンショットを見るここに画像の説明を入力してください

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
4

2 に答える 2

6

時間列を作成しました。少し紛らわしいことに、RubyTimeストアでは時刻と日付が格納されますが、データベースの世界では純粋な時刻 (つまり、時間/分/秒のみ) の概念が存在し、タイプ :time の列を移行。

Ruby 自体には、日付のない時刻を表すクラスがないため、レールは のインスタンスを使用しますTimeが、日付ビットは無視します。

時刻と日付の両方を格納する列が必要な場合は、列を :datetime 列に変更します (Timeほとんどの場合、インスタンスが返されます。

于 2012-05-28T07:29:03.130 に答える
1

ActiveRecord では、データ型を使用したり、正しい日付形式を保存し:timestampたりできます。:datetime

于 2012-05-31T21:42:54.160 に答える