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

23t*_*tux 5 datetime ruby-on-rails iso8601 rabl

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

node :created_at do |article|
  article.created_at.iso8601
end
Run Code Online (Sandbox Code Playgroud)

如果可以在一个地方设置每个日期对象的格式,那么它可以节省大量的代码重复,这样我就可以使用这样的attributes方法

attributes :created_at
Run Code Online (Sandbox Code Playgroud)

我在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使用什么日期和时间格式?如果没有,那么实现这一目标的最好/最少hacky方法是什么?

小智 2

FWIW我在rails 4.2.8、Rabl 0.13.1和OJ 2.18.5中修复了这个问题

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

Oj.default_options = {:use_as_json => true}
Run Code Online (Sandbox Code Playgroud)