如何使 Ruby + Grape API 中的所有时间输出均为 ISO 8601

How to make all Time outputs be ISO 8601 in Ruby + Grape API

我一直在寻找最简单的解决方案,以便在将所有日期时间值从 API 发送给特定请求者时将它们转换为 ISO 8601。我能够使用以下代码猴子补丁 Time#to_json

class Time
  def to_json(options = {})
    self.iso8601.to_json
  end
end

当参数显示请求来自所需位置时,在 Grape 的 before 回调中要求文件。

这是完成此任务的最佳方法吗?我是否可以在 Grape 的 after 回调中做一些事情来循环遍历我的数据并在那里转换值?猴子修补 Time#to_json 完成了工作,但我觉得很有趣。虽然我是 Ruby.

的新手

您是否正在使用 Grape Entity 公开您的模型?如果你正在使用它,那么你可以像这样定义一个可重用的格式化程序:

module ApiHelpers
  extend Grape::API::Helpers

  Grape::Entity.format_with :iso8601 do |date|
    date.iso8601 if date
  end
end

然后,您可以在所有实体中使用此格式化程序:

module Entities
  class MyModel < Grape::Entity
    expose :updated_at, format_with: :iso8601
  end

  class AnotherModel < Grape::Entity
    expose :created_at, format_with: :iso8601
  end
end

但如果您不使用 Grape Entity...那么,我认为您应该使用。 :)

PS.: 我在这里展示的所有示例都是从 Grape Entity 文档中提取的。 https://github.com/ruby-grape/grape-entity