2012-10-20 71 views
1

我正在使用Rails应用程序作为iOS后端。有一个小问题 - 如何使用json中的用户时区显示时间戳?我使用的是默认的UTC时区。如何将它转换为+2?也许有办法如何重写as_json方法来转换渲染之前的时间戳?Rails渲染json与正确的时区

感谢您的帮助!

回答

4

您可以在呈现json之前将时间转换为用户的时区,然后将时区包含在内。

1.9.3p125 :006 > t = Time.now.utc 
=> 2012-10-20 13:49:12 UTC 
1.9.3p125 :007 > {time: t}.to_json 
=> "{\"time\":\"2012-10-20T13:49:12Z\"}" 
1.9.3p125 :008 > t = Time.now.in_time_zone("Beijing") 
=> Sat, 20 Oct 2012 21:49:19 CST +08:00 
1.9.3p125 :009 > {time: t}.to_json 
=> "{\"time\":\"2012-10-20T21:49:19+08:00\"}" 

UPDATE:将时间转换成用户的时区为系列化,您可以覆盖此方法read_attribute_for_serialization。请参阅ActiveModel的lib/active_model/serialization.rb:

# Hook method defining how an attribute value should be retrieved for 
# serialization. By default this is assumed to be an instance named after 
# the attribute. Override this method in subclasses should you need to 
# retrieve the value for a given attribute differently: 
# 
# class MyClass 
#  include ActiveModel::Validations 
# 
#  def initialize(data = {}) 
#  @data = data 
#  end 
# 
#  def read_attribute_for_serialization(key) 
#  @data[key] 
#  end 
# end 
# 
alias :read_attribute_for_serialization :send 
+0

例如,我需要使用'created_at'字段呈现模型用户。我需要渲染洞模型一次,所以我需要覆盖用户模型中的to_json方法。但我没有任何想法如何去做。 –

+0

查看我的答案更新。 – Yanhao

+0

是的。看起来像是有效的。有点弯曲的解决方案=)谢谢! –