我需要更新一个字段(称为updated_at
)。 MySQL中的字段是datetime
类型,类是ActiveSupport::TimeWithZone
。但日期是字符串,如"10/17/2008"
。我使用"10/17/2008".to_date
(我打算.to_time
和.to_datetime
),即使在控制台中ActiveRecord类成功保存,数据库中的字段仍然是当前日期。
答案 0 :(得分:5)
好的..让我们一起拿一个。
首先,建议不要设置字段名updated_at
,因为这是一个由Rails自动填充的“魔术”字段。
如果要禁用此功能,您可以:
class Foo < ActiveRecord::Base
self.record_timestamps = false
end
在您的课程中,但这也会禁用created_at
个字段。
最好的选择是在数据库中添加一个新字段(例如my_updated_at
)作为日期,然后Rails将自动处理转换,这意味着下一个代码段将起作用:
Foo.new({:my_updated_at => "10/17/2008"})
其次,关于如何将字符串解析为ActiveSupport::TimeWithZone
的答案是:
ActiveSupport::TimeZone['UTC'].parse("10/17/2008")
但我认为这不会对您有所帮助(当然,请使用您当前的日期/时间更改UTC
)。
答案 1 :(得分:1)
简单
date_as_string = "2008-10-17"
ActiveSupport::TimeZone['UTC'].parse(date_as_string)
# => Fri, 17 Oct 2008 00:00:00 UTC +00:00
和只是为了确认它的工作..
ActiveSupport::TimeZone['UTC'].parse(date_as_string).class
# => ActiveSupport::TimeWithZone