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

时间:2015-09-03 14:47:42

标签: ruby-on-rails datetime iso8601 rabl

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

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,它们会覆盖as_json中的ActiveSupport::TimeWithZone方法,这也是一个非常适合猴子的解决方案。

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

2 个答案:

答案 0 :(得分:2)

FWIW我在rails 4.2.8,Rabl 0.13.1和OJ 2.18.5中解决了这个问题

添加具有以下内容的初始化程序..

Oj.default_options = {:use_as_json => true}

答案 1 :(得分:0)

听起来很疯狂,但这可以通过更改JSON序列化程序来解决:

bundle add oj