2012-05-24 12 views
5

Neyin yanlış gittiğini ciddi olarak karıştırıyorum.Heroku'da güncellenmeyen süre

ben heroku run console giriş yapmış ve benim veritabanı üzerinde bir zaman damgası güncellemeye çalışıyorum.

Ben kullanıcı bu değer neden bilmiyorum bir :next_click = 2000-01-01... sahip olduğunu görmek için User.find(6) koşuyoruz ama neyse, User.update 6, {:next_click => Time.utc(2015)} yapmak ve onu başka User.find(6) görünüyor yapmak ancak ne zaman 2015-01-01 00:00:00 diyerek düzgün güncellemek gibi görünüyor zaman geri döndü çünkü 2015-01-01 00:00:00 değil.

Neden olmasın diye kafam karıştı. Herhangi bir anlayış?

ekran görüntüsünü de ekliyoruz SEE 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"> 

aynı şey sonra 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 
+0

ekli ekran görüntüsü okunaksız olduğunu. okunabilir bir boyutta metin kopyalama ve yapıştırma edin. –

+0

Üzgünüm, metin dahil ettik ... – mazlix

+1

orada olabilir bir Yaptığınız güncellemeleri geçersiz kılan tablodaki tetikleyici –

cevap

6
ile olur

Bir zaman sütunu oluşturdunuz. Biraz kafa karıştırıcı olsa da, ruby ​​Time zaman + tarihinde depolar olsa da, veritabanı dünyasında günün saf bir zaman kavramı (yani sadece saat/dakika/saniye) var ve bu tür bir sütun eklediğinizde aldığınız şey: time to Göçün.

Yakut kendisi Time bir örneğini kullanır ama tarih biraz görmezden raylar böylece bir tarihi olmayan bir süreyi temsil bir sınıf yoktur.

Saat ve tarihi hem depolayan bir sütun istiyorsanız, bir sütun değiştirin: Hala çoğu durumda geri Time örneği alırsınız

1

sizin ActiveRecord olarak veri türünü kullanabilirsiniz (datetime biri. :timestamp veya :datetime doğru tarih formatını saklamak için.