2011-03-20 68 views
3

我在Mac機器上使用Rails 3.0.4,Ruby 1.9.2p0。雖然使用SQLite作爲默認的數據庫,併成功添加的respond_to:XML功能,我看到在XML中的日期時間格式是一樣的東西:如何使用Rails3更改xml響應中的datetime?

<updated-at type="datetime">2011-03-20T12:15:47Z</updated-at> 

雖然是幾個帖子在網絡上(這裏也)詢問如何改變日期/時間格式像在配置/區域/ en.yml使用配置,或添加

Time::DATE_FORMATS[:default] = "%Y-%m-%d %H:%M:%S" 
在初始化文件

,既不工作。

我認爲這個問題是因爲當我打電話someobj.to_xml,爲datetime對象,軌道將調用

datetime.xmlschema 

,而不是調用

datetime.to_s 

其繞開上面提到的設置。 雖然我知道這可能是罪魁禍首,我不知道如何解決它。任何人都有這方面的經驗?非常感謝!

+1

爲DATETIME格式設置爲XML標準的一部分(http://www.w3.org/ TR/xmlschema-2 /#isoformats)你最好不要改變它。 – tommasop 2011-03-20 19:49:15

回答

1

如果您確實需要改變它,你可以重寫XML模式的方法,而不是to_s

class DateTime 
    def xmlschema 
    strftime("%Y-%m-%d %H:%M:%S") 
    end 
end 

,但正如我在評論說,你是打破了XLM標準和應用程序連接到你不會想到這日期時間格式。

+0

是的,我認爲它可以通過覆蓋原來的xmlschema方法來完成,並且我在config/environment.rb文件中添加了這段代碼,但仍然沒有運氣 - 我確定它被替換了。在rails控制檯中,我可以看到「DateTime.now.xmlschema」的輸出是「2011-03-21 07:34:00」,但在xml中,仍然是「2011-03-21T07:34:00Z」 – 2011-03-20 23:34:29

+0

您可以嘗試將它放入初始化程序中。或者你可以直接覆蓋to_xml,如下所示:http://stackoverflow.com/questions/2403794/xml-serialization-is-not-including-milliseconds-in-datetime-field-from-rails-mode – tommasop 2011-03-21 08:06:18

1

我把這個代碼放到time_formats.rb在初始化中取毫秒

class ActiveSupport::TimeWithZone 
    alias_method :original_xmlschema , :xmlschema 
    def xmlschema(fraction_digits = 3) 
    original_xmlschema(fraction_digits) 
    end 
end 

Gist on GitHub

+0

很酷,謝謝您! – 2011-05-25 07:05:37