默认情况下,从数据库中的日期时间字段被转换并剥除毫秒:

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所有正在运行的)

目前我只发现了几个“黑客”有关日期时间字段和数据库 但没有清洁溶液没有惊喜...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top