我一直在寻找最简单的解决方案,在从 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 的新手。
您是否使用葡萄实体来公开模型?如果你正在使用它,那么你可以定义一个可重用的格式化程序,如下所示:
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
但是,如果您不使用葡萄实体...好吧,我认为你应该。:)
PS.:我在这里展示的所有示例都摘自葡萄实体文档。https://github.com/ruby-grape/grape-entity