【问题标题】:Datetime fails to save but without error日期时间无法保存但没有错误
【发布时间】:2015-11-07 04:34:09
【问题描述】:

我尝试保存具有名为class_datetime(这是DateTime)的属性的行,但它静默失败。这是一个例子:

我创建了一个新的LittleClassSession,如下所示:

irb(main):010:0> l = LittleClassSession.new
=> #<LittleClassSession id: nil, length: nil, class_datetime: nil, created_at: nil, updated_at: nil, little_class_id: nil, location_id: nil, session_series_token: nil>

class_datetimeDateTime

irb(main):011:0> LittleClassSession.columns_hash["class_datetime"].type
=> :datetime

我设置了属性:

irb(main):012:0> l.class_datetime = DateTime.now
=> 2015-08-13 22:02:09 -0400

然后我保存(还没有验证):

irb(main):013:0> l.save
   (0.1ms)  begin transaction
  SQL (0.4ms)  INSERT INTO "little_class_sessions" ("class_datetime", "created_at", "updated_at") VALUES (?, ?, ?)  [["class_datetime", "2015-08-13 22:02:09.976030"], ["created_at", "2015-08-13 22:03:01.255911"], ["updated_at", "2015-08-13 22:03:01.255911"]]
   (2.6ms)  commit transaction
=> true

看起来成功了。让我们看看我保存了什么:

irb(main):014:0> l
=> #<LittleClassSession id: 728, length: nil, class_datetime: "2015-08-14 02:02:09", created_at: "2015-08-14 02:03:01", updated_at: "2015-08-14 02:03:01", little_class_id: nil, location_id: nil, session_series_token: nil>

让我们看看表中有什么:

irb(main):015:0> LittleClassSession.last
  LittleClassSession Load (0.2ms)  SELECT  "little_class_sessions".* FROM "little_class_sessions"   ORDER BY "little_class_sessions"."id" DESC LIMIT 1
=> #<LittleClassSession id: 728, length: nil, class_datetime: nil, created_at: nil, updated_at: nil, little_class_id: nil, location_id: nil, session_series_token: nil>

我的 LittleClassSession 模型如下所示:

class LittleClassSession < ActiveRecord::Base
  belongs_to :little_class
  belongs_to :location
end

这可能是什么原因造成的?最近我更改了application.rb 中的默认时区,但我不明白这可能是什么原因。

【问题讨论】:

  • 试试#save! 看看它是否会抛出任何错误。

标签: ruby-on-rails sqlite datetime ruby-on-rails-4


【解决方案1】:

您的 :date_time 字段是 DateTime 对象。

试试这个:

l.class_datetime = DateTime.now

而不是:

l.class_datetime = Time.now

【讨论】:

  • 我试过了,没有任何变化。它仍在保存nil
  • 您可以粘贴您的little_class_session 型号代码吗?
【解决方案2】:

当我从application.rb 中删除这两行后,问题就消失了:

config.time_zone = 'Eastern Time (US & Canada)'
config.active_record.default_timezone = 'Eastern Time (US & Canada)'

这显然造成了一些混乱。

【讨论】:

  • 有人能解释发生了什么吗?
猜你喜欢
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多