【问题标题】:Time fields in Rails coming back blankRails 中的时间字段返回空白
【发布时间】:2011-02-15 04:48:39
【问题描述】:

我有一个在 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

我猜是在检索部分?这是怎么回事?

【问题讨论】:

    标签: ruby-on-rails sqlite sqlite3-ruby


    【解决方案1】:

    技术上,它不会返回空白。它作为具有默认日期的时间返回。它返回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"
    

    【讨论】:

    • 啊,好的,我知道它现在是如何挂在一起的了。唯一奇怪的部分是它不是对称的——如果它在进入数据库的过程中也去掉了未映射的日期部分,我会更快地掌握它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    相关资源
    最近更新 更多