0

シードマテリアルを生成しようとしています。

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)Railsコンソールでテストしましたが、期待どおりに動作します。ただし、データベースにシードを作成しようとすると、ブードゥーの魔法が発生し、希望の日付が取得されません。

任意の入力をいただければ幸いです。ありがとうございました!

Update1:

(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"

これがRailsコンソールに表示されるものです。

4

2 に答える 2

2

との:timeタイプを使用したようです。そのコンテキストでは、時刻は日付のない純粋な時刻データ型を指します。これは、SQLの時刻タイプであるためです。start_tend_t

RubyのTimeタイプは日付と時刻の両方をカバーするため、データベース列は:datetimeである必要があります。実際、rubyには純粋な時刻クラスがないため、activerecordは代わりに偽の日付を持つ通常の時刻を使用します。

于 2012-07-03T07:23:49.310 に答える
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とend_tでのSQLとは少し異なります。

 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

Time.newの代わりにDateTime.newを使用しようとしましたか?

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]}")
于 2012-07-03T02:22:10.613 に答える