2012-07-03 3 views
0

일부 시드 재료를 생성하려고합니다.Time.new가 예상대로 작동하지 않습니다.

seed_array.each do |seed| 
    Task.create(date: Date.new(2012,06,seed[1]), start_t: Time.new(2012,6,2,seed[2],seed[3]), end_t: Time.new(2012,6,2,seed[2] + 2,seed[3]), title: "#{seed[0]}") 
end 

궁극적으로 임의의 시간, 분, 초를 넣습니다. 내가 직면하고있는 문제는 2012-06-02 날짜로 시간을 만드는 대신 다른 날짜 (2000-01-01)로 시간을 생성한다는 것입니다.

나는 레일 콘솔에서 Time.new(2012,6,2,2,20,45)을 테스트했으며 예상대로 작동합니다. 그러나 내 데이터베이스를 뿌리려고 할 때 일부 부두교 마술이 일어나고 원하는 날짜를 얻지 못합니다.

모든 의견을 환영합니다. 고맙습니다!

갱신 1은 :

(0.0ms) begin transaction SQL 
(0.5ms) INSERT INTO "tasks" ("created_at", "date", "description", 
    "end_t", "group_id", "start_t", "title", "updated_at") VALUES (?, ?, 
    ?, ?, ?, ?, ?, ?) [["created_at", Tue, 03 Jul 2012 02:15:34 UTC 
    +00:00], ["date", Thu, 07 Jun 2012], ["description", nil], 
    ["end_t", 2012-06-02 10:02:00 -0400], ["group_id", nil], 
    ["start_t", 2012-06-02 08:02:00 -0400], ["title", "99"], 
    ["updated_at", Tue, 03 Jul 2012 02:15:34 UTC +00:00]] 
(2.3ms) commit transaction 

이 로그의 작은 샘플입니다.

업데이트 2

Task id: 101, date: "2012-06-26", start_t: "2000-01-01 08:45:00", end_t: "2000-01-01 10:45:00", title: "1", description: nil, group_id: nil, created_at: "2012-07-03 02:15:33", updated_at: "2012-07-03 02:15:33" 

이 레일 콘솔에 표시하는 것이다.

+0

로그에서 생성 된 SQL은 무엇입니까? –

+0

@ MarkThomas 로그를 포함했습니다. 내 문제가 시간을 표시하는 것처럼 보입니다. Mark 고맙습니다! 당신은 옳은 방향으로 초보자를 지적했습니다. –

+0

@ MarkThomas Woops 곧 이야기를 나눴습니다. 문제는 시간을 표시하는 것이 아닙니다. 레일 콘솔로 갈 때 Task.all을 누르면 데이터가 제대로 저장되지 않았다는 것을 알 수 있습니다. –

답변

2

는 소리. 그 맥락에서 시간은 날짜가없는 순수한 시간 데이터 유형을 의미합니다. 왜냐하면 이것이 SQL 시간 유형이기 때문입니다.

루비의 Time 유형은 날짜와 시간을 모두 포함하므로 데이터베이스 열은 datetime이어야합니다. 실제로 루비는 순수한 시간 클래스를 가지고 있지 않으므로 activerecord는 가짜 날짜를 가진 정규 시간을 대신 사용합니다.

+0

변경했습니다. to : datetime 그리고 예상대로 작동합니다. 고맙습니다! –

0

난 당신이 이런 식으로 코드를 테스트 한 :

arr = [1,2,3] 

arr.each do |seed| 
    Timetest.create(time: Time.new(2012,6,2,2,20,45), title: "#{seed}") 
end 

그리고 그 작업은 예상대로. 하지만 난 내 콘솔에서이 SQL을 했죠 그리고 당신 start_t에서 당신보다 그 조금 다른과

SQL (4.1ms) INSERT INTO "timetests" ("created_at", "time", "title", "updated_at") VALUES (?, ?, ?, ?) [["created_at", Tue, 03 Jul 2012 02:11:35 UTC +00:00], ["time", Sat, 02 Jun 2012 07:20:45 UTC +00:00], ["title", "1"], ["updated_at", Tue, 03 Jul 2012 02:11:35 UTC +00:00]] 

업데이트 1

당신이 DateTime.new 대신 Time.new을 사용하려 적이 end_t? 당신이 start_tend_t 당신의 :time 유형을 예전처럼

Task.create(date: DateTime.new(2012,06,seed[1]), start_t: DateTime.new(2012,6,2,seed[2],seed[3]), end_t: DateTime.new(2012,6,2,seed[2] + 2,seed[3]), title: "#{seed[0]}") 
+0

업데이트 2에서 찾을 수 있습니다. 괜찮아 보이지 않습니다. 2000으로 저장합니다. –

+0

RoR에 어떤 버전이 있습니까? 나는 당신이 SQL에서 날짜 형식에 다른 형식을 삽입하고 있음을 알게되었습니다. "start_t"\t 2012-06-02 08:02:00 -0400 "updated_at", Tue, 03 Jul 2012 02:15:34 UTC +00 : 00 나는 루비 1.9.3을 사용해 보았을 때 내 SQL은 다음과 같습니다 : SQL (4.1ms) INSERT INTO "timetests"("created_at", "time", "title", "updated_at") VALUES (?,?,?,?) 2012 년 6 월 2 일 (월) 07:20:45 UTC +00 : 00], [ "title"] [[ "created_at", Tue, 03 Jul 2012 02:11:35 UTC +00 : 00] , "1"], [ "updated_at", Tue, 03 Jul 2012 02:11:35 UTC +00 : 00]] –

+0

레일 3.2.3과 Ruby 1.9.3을 사용하고 있습니다. –

관련 문제