现在是用它来帮助 sinatra 输出 json 的,不过时间字段没有专门格式化,土办法当然有,不过我希望有优雅一些的,求教
问题不在 jbuilder 上。
RAILS 是这么做的。直接 patch Time, Date .
#4 楼 @knwang 这个问题恐怕贴代码没啥用,我只是想看看其他人有没有最佳实践
# app.rb
get '/read' do
@posts = @current_user.read_posts
Jbuilder.encode do |json|
eval(File.read("#{settings.views}/posts.jbuilder"))
end
end
# posts.jbuilder
json.posts @posts do |json, post|
json.(post, :token, :title, :content, :created_at, :updated_at)
end
把 created_at 和 updated_at 拆出来就好了
json.(post, :token, :title, :content) json.created_at post.created_at.stamp("Jan 01, 2012") json.updated_at post.updated_at.stamp("Jan 01, 2012")
默认的格式多好...
# 载入 AR 后,model 前,也可以写成一个 module 只给需要的 include
class ActiveRecord::Base
attribute_method_prefix 'wtfdate_'
def wtfdate_attribute attr
send(attr).try :strftime, '>>%Y%m%d<<'
end
end
post.as_json only: [:token, :title, :content, :wtfdate_created_at, :wtfdate_updated_at]
ruby json 添加的 Date#to_json 就是 to_s
activesupport 修改了 Date#to_json,格式和 yaml 和 javascript 的 JSON.stringify() 结果相同,后来觉得污染了就改成 as_json 并加上开关
告诉调用者日期格式是 ISO8601 就可以了吧... 不要自己乱搞弄奇怪的格式...