2012-05-24 42 views
5

Tôi rất bối rối về những gì có thể xảy ra.Thời gian không cập nhật trong heroku

Tôi đã đăng nhập vào heroku run console và cố gắng cập nhật dấu thời gian trên cơ sở dữ liệu của mình.

tôi đã chạy User.find(6) để thấy rằng người dùng có một :next_click = 2000-01-01... tôi không biết lý do tại sao nó là giá trị đó, nhưng dù sao, tôi làm User.update 6, {:next_click => Time.utc(2015)} và có vẻ như để cập nhật đúng nói 2015-01-01 00:00:00, tuy nhiên khi tôi làm User.find(6) khác có vẻ như thời gian đã chuyển trở lại vì không phải là 2015-01-01 00:00:00.

Tôi thực sự bối rối vì sao không. Có cái nhìn sâu sắc nào không?

xem đính kèm 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"> 

Điều tương tự cũng xảy ra với u = User.find(6)u.next_click = Time.utc(2013) sau đó 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

các ảnh chụp màn hình kèm theo là không đọc được. Vui lòng sao chép và dán văn bản trong một kích thước có thể được đọc. –

+0

Xin lỗi, tôi đã bao gồm các văn bản ... – mazlix

+1

có thể có một kích hoạt trên bảng ghi đè các cập nhật bạn đang thực hiện? –

Trả lời

6

Bạn đã tạo cột thời gian. Hơi gây nhầm lẫn, mặc dù trong ruby ​​Time cửa hàng thời gian + ngày, trong thế giới cơ sở dữ liệu khái niệm về thời gian thuần túy trong ngày (tức là chỉ vài giờ/phút/giây) tồn tại và đó là những gì bạn nhận được khi bạn thêm một cột loại: di chuyển của bạn.

Bản thân Ruby không có lớp đại diện cho thời gian không có ngày nên đường ray sử dụng một thể hiện là Time nhưng bỏ qua bit ngày.

Nếu bạn muốn có một cột lưu trữ cả thời gian và ngày, thay đổi cột để a: datetime một (bạn vẫn sẽ nhận được một trường hợp Time trở lại trong hầu hết các trường hợp

1

Trong ActiveRecord bạn có thể sử dụng các kiểu dữ liệu. :timestamp hay :datetime để lưu trữ các định dạng ngày tháng chính xác.

Các vấn đề liên quan