我一直在寻找一个最简单的解决方案,在将所有datetime值从api发送给特定的请求者时,将它们转换为iso 8601。我可以用以下方法修补Time#to_json

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

当params显示请求来自所需位置时,需要grape的before回调中的文件。
这是实现这一目标的最好方法吗?我可以在grape的after回调中做些什么来循环我的数据并在那里转换值吗?猴子修补可以完成任务,但我觉得很有趣。虽然我对鲁比还不熟悉。

最佳答案

您是否使用grape实体来公开您的模型?如果正在使用它,则可以定义一个可重用的格式化程序,如下所示:

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

但如果你不使用葡萄实体…好吧,我觉得你应该。:)
注:我在这里展示的所有例子都是从葡萄实体文档中提取出来的。
https://github.com/ruby-grape/grape-entity

10-08 19:59