XML序列化不包括从Rails的模型,日期时间字段毫秒
-
18-09-2019 - |
题
默认情况下,从数据库中的日期时间字段被转换并剥除毫秒:
some_datetime => “2009-11-11T02:19:36Z”
attribute_before_type_cast( 'some_datetime')=> “2009-11-11 02:19:36.145”
如果我尝试overrride存取该属性等;
def some_datetime
attribute_before_type_cast('some_datetime')
end
当我尝试“to_xml”为模型,我收到以下错误:
NoMethodError(未定义的方法 `XMLSCHEMA”为“2009-11-11 02:19:36.145" :字符串):
我试图解析该字符串Time对象,但不能得到一个以包括毫秒;
def some_datetime
Time.parse(attribute_before_type_cast('some_datetime').sub(/\s/,"T").sub(/$/,"Z"))
end
谁能帮得得到一个日期与to_xml呈现毫秒?
解决方案
事实证明,可以排除原始日期时间字段,并添加其又使该日期时间作为字符串到to_xml定制方法。这种感觉的hackish,但它的工作..有另一种方式来直接在原来的日期时间字段中取毫秒?
在每个模型中,我排除“除”具有我想要改变日期时间字段名称,并且我包括“方法”具有相同名称它类型强制转换之前返回的属性。
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工作很大与模型包括与任何其他选项我通过在
其他提示
我已经开始学习Ruby和被垫“的原则最少意外。”
印象但是在Ruby(和轨道)的日期和时间执行充满惊喜:
与一个普通的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
确定用于需要一定的Rails:
sqlserver_test /发展?: DT2 = Time.zone.now结果 =>周一,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(:ISO8601)点击 =>“2010-05-31十七时24分54秒0200”,点击 sqlserver_test /开发:dt2.to_s(:ISO8601)== dt2.iso8601结果 =>假
(与在Windows XP的Rails 2.3.5 1.9.1所有正在运行的)
目前我只发现了几个“黑客”有关日期时间字段和数据库 但没有清洁溶液没有惊喜...