如何使 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
我一直在寻找最简单的解决方案,以便在将所有日期时间值从 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