Rails:对于每个模型,始终包含created_at的毫秒数
如何修改我的Rails应用程序以始终包含我的模型的created_at
字段的毫秒信息?
这个问题有关于如何为单个模型做到这一点的答案,但我想在全球范围内进行。
例如,当我检索所有的Item
模型时(通过使用GET命中/items
),我得到以下JSON:
[{"created_at":"2011-08-07T23:42:15Z","updated_at":"2011-08-07T23:42:15Z","id":180,"user_id":6,"content":"test"}]
但请注意, created_at
字段没有关于它创建的毫秒数的任何信息。 如何为我的所有模型添加该function?
对于Rails 4.1及更高版本,您可以设置time_precision ,例如在application.rb中
ActiveSupport::JSON::Encoding.time_precision = 3
顺便说一下,显示毫秒现在是默认值,如果应该省略它们,则可以设置为0。 另外,最好知道.iso8601
不包括毫秒,但.as_json
保留它们。
覆盖ActiveSupport::TimeWithZone#as_json
为我工作:
class ActiveSupport::TimeWithZone def as_json(options = nil) if ActiveSupport::JSON::Encoding.use_standard_json_time_format xmlschema(3) else %(#{time.strftime("%Y/%m/%d %H:%M:%S")} #{formatted_offset(false)}) end end end
确保将此代码放在Rails应用程序所需的文件中。 现在,当我将created_at属性转换为JSON时,我得到毫秒:
puts Post.last.created_at.to_json # => "2012-06-29T11:51:00.841Z"
还要确保使用Time.zone
来实例化新的Time对象,以便它们显示相同的JSON行为:
time = Time.zone.now puts time.to_json # => "2012-06-29T16:45:30.547Z"
希望这有助于某人!
我可以使用本指南覆盖我的Item模型的created_at
属性选择器。
任何人都知道如何为所有型号做到这一点?