2

Sqlite3 で実行されている単純な Rails 3.b1 (Ruby 1.9.1) アプリケーションがあります。私はこのテーブルを持っています:

create_table :time_tests do |t|
  t.time :time
end

そして、私はこの動作を見ます:

irb(main):001:0> tt = TimeTest.new
=> #<TimeTest id: nil, time: nil>
irb(main):002:0> tt.time = Time.zone.now
=> Mon, 03 May 2010 20:13:21 UTC +00:00
irb(main):003:0> tt.save
=> true
irb(main):004:0> TimeTest.find(:first)
=> #<TimeTest id: 1, time: "2000-01-01 20:13:21">

だから、時間が空白に戻ってきます。テーブルを確認すると、データは問題ないようです。

sqlite> select * from time_tests;
1|2010-05-03 20:13:21.774741

私はそれが検索部分にあると思いますか?何が起きてる?

4

1 に答える 1

4

技術的には、空白にはなりません。デフォルトの日付の時刻として返されます。2000-01-01 20:13:21期待どおりの時間として返されます。

Rails は、データを Time オブジェクトに魔法のようにロードし、日付を消去しています (時刻を保存するように指示しただけなので)。

日付と時刻を保存する場合は、列を として定義する必要がありますdatetime。逆に、日付だけが必要な場合は、 を使用しますdate

要約すると:

date => "2010-12-12 00:00:00"
time => "2000-01-01 13:14:15"
datetime => "2010-12-12 13:14:15"
于 2010-05-03T20:59:05.117 に答える