2012-05-24 3 views
5

나는 잘못 될 수있는 것을 심각하게 혼동합니다.히로쿠에서 시간이 업데이트되지 않습니다

heroku run console에 로그인했으며 데이터베이스에서 타임 스탬프를 업데이트하려고합니다.

나는 사용자가 그 값 왜 내가 모르는 :next_click = 2000-01-01...을 가지고 있는지 User.find(6)을 실행했지만, 어쨌든, 나는 User.update 6, {:next_click => Time.utc(2015)}을하고 내가 다른 User.find(6)가 보인다 할 그러나 때, 2015-01-01 00:00:00 말을 제대로 업데이트 할 것 2015-01-01 00:00:00이 아니기 때문에 시간이 다시 전환되었습니다.

나는 그것이 왜 그렇게 혼란 스럽습니다. 어떤 통찰력?

SCREENSHOT에게 ATTACHED 참조하십시오 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 
+0

첨부 된 스크린 샷이 읽을 수 있습니다. 읽을 수있는 크기로 복사 및 붙여 넣기하세요. –

+0

미안 해요, 텍스트를 포함 시켰습니다 ... – mazlix

+1

이 될 수있는 당신이 만들고있는 업데이 트를 무시 테이블에 방아쇠를 당길? –

답변

6
으로 발생

시간 항목을 만들었습니다. 약간 혼란 스럽지만, 비록 루비에서 Time이 시간 + 날짜를 저장하고 있지만, 데이터베이스 세계에서는 순수한 시간 (즉, 시간/분/초)의 개념이 존재합니다. 그리고 그것은 타입의 열을 추가 할 때 얻을 수 있습니다 : time to 귀하의 이전.

Ruby에는 날짜가없는 시간을 나타내는 클래스가 없으므로 레일스는 Time의 인스턴스를 사용하지만 날짜 비트는 무시합니다.

시간과 날짜를 모두 저장하는 열을 원하는 경우에 열을 변경 : 당신은 아직도 대부분의 경우 다시 Time 인스턴스를 얻을 것이다

1

당신의 액티브에서 데이터 형식을 사용할 수 있습니다 (날짜 하나. :timestamp 또는 :datetime 올바른 날짜 형식을 저장합니다.

관련 문제