RABL:将默认日期和时间格式更改为 iso8601

RABL: change default date and time format to iso8601

我正在为我的 API 使用 rabl 0.11.6,我发现自己对每个日期或时间对象一遍又一遍地执行以下操作:

node :created_at do |article|
  article.created_at.iso8601
end

如果每个日期对象的格式都可以在一个地方设置,这样我就可以像这样使用 attributes 方法

attributes :created_at

我在 github (https://github.com/ccocchi/rabl-rails/issues/68) 上发现了一个问题,他们建议在初始化程序中覆盖一些 Oj.default_options = { mode: :compat, time_format: :ruby }。但我不知道如何做 .iso8601.

然后我找到了这个https://gist.github.com/astevens/b80225d96d8889c946ac。但它看起来像是一个 hacky 猴子补丁解决方案。

最后我发现了这个问题 https://github.com/nesquena/rabl/issues/336 他们覆盖了 ActiveSupport::TimeWithZone 中的 as_json 方法,这也是一个非常猴子补丁的解决方案。

有没有办法告诉RABL使用什么日期和时间格式?如果没有,实现此目标的最佳/最简单的方法是什么?

FWIW 我在 rails 4.2.8、Rabl 0.13.1 和 OJ 2.18.5

中修复了这个问题

使用以下内容添加初始化器..

Oj.default_options = {:use_as_json => true}

听起来很疯狂,这通过更改 JSON 序列化器来修复它:

bundle add oj