默认情况下,数据库中的datetime字段正在转换并去掉毫秒:
some_datetime => "2009-11-11T02:19:36Z“
attribute_before_type_cast('some_datetime') => "2009-11-11 02:19:36.145“
如果我试图重写该属性的访问器,如下所示;
def some_datetime
attribute_before_type_cast('some_datetime')
end当我尝试该模型的"to_xml“时,我会得到以下错误:
NoMethodError (用于"2009-11-11 02:19:36.145“的未定义方法‘`xmlschema’):String:
我试图将字符串解析为Time对象,但无法获得包含毫秒的字符串;
def some_datetime
Time.parse(attribute_before_type_cast('some_datetime').sub(/\s/,"T").sub(/$/,"Z"))
end有人能帮助获得to_xml呈现的毫秒的日期时间吗?
发布于 2010-03-08 19:17:42
事实证明,我可以排除原始的datetime字段,并添加一个自定义方法,然后将datetime作为字符串呈现给to_xml。这感觉很烦人,但很管用.在原始的datetime字段中是否有另一种直接获取毫秒的方法?
在每个模型中,我排除了“除了”字段名,这些字段名的日期时间是我想要更改的,我还包括了“方法”,它的名称相同,在输入属性之前返回该属性。
def to_xml(options = {})
options[:methods] = [:some_datetime]
options[:except] = [:some_datetime]
super
end
def some_datetime
attribute_before_type_cast('some_datetime')
end渲染to_xml的效果很好,包括模型和我传入的任何其他选项。
发布于 2010-05-31 16:45:08
我已经开始学习Ruby,并且对Mats“最不惊讶的原则”印象深刻。
但是Ruby (和Rails )中的日期和时间实现充满了惊喜:
从一个普通的irb开始:
需要‘时间’
=>真
dt = Time.now
=> 2010-05-31 17:18:39 +0100
Time.parse(dt.to_s) == dt
=>假的!?
dt.to_s(:db)
ArgumentError:错误的参数数(1对0)
(Irb):5:在to_s'
from (irb):5
from C:/Ruby19/bin/irb:12:in‘
好吧,让我们走几条铁轨:
sqlserver_test/development?:dt2 = Time.zone.now
=> Mon,2010年5月31日17:24:54 CEST +02:00
sqlserver_test/开发: dt2.class
=> ActiveSupport::TimeWithZone
sqlserver_test/开发: Time.zone.parse(dt2.to_s) == dt2
=>假
sqlserver_test/开发: dt2.to_s(:db)
=> "2010-05-31 15:24:54“
sqlserver_test/开发:dt2.to_s(:test 8601)
=> "2010-05-31 17:24:54 +0200“
sqlserver_test/开发:dt2.to_s(:test 8601) == dt2.iso8601
=>假
(全部运行在Ruby1.9.1上,Rails 2.3.5在Windows上运行)
目前,我只发现几个关于DateTime字段和数据库的“黑客”,但没有干净的解决方案,没有惊喜.
https://stackoverflow.com/questions/2403794
复制相似问题