我设置了索引端点API。此API控制器不从应用程序控制器继承。
def index
@projects = Project.all
respond_with @projects
end
查询它返回:
[{“id”:7,“name”:“Something”,“location”:“United States”,“user_id”:54,“created_at”:
{“^ o”:“ActiveSupport :: TimeWithZone”,“utc”://don't need
{“^ t”:1513746428.835358000},“time”:null,“time_zone”://don't need
问题在于它会在每个project
中返回大量的时区信息,从而减慢应用程序的速度。
如何在PG数据库中看到的UTC中只返回created_at时间戳,而不会出现时区混乱?
答案 0 :(得分:1)
在您的选择查询中:
Select (created_at at time zone 'pst') as created_at from ...
答案 1 :(得分:1)
看起来你想要实现的是json的受控格式化。
如果是这种情况,我想你想创建一个json视图。我没有使用响应者gem,所以我可能没有看到一些细微差别,但通常你会创建一个文件来指定你想要返回的内容。
在index.json.jbuilder中:
json.array! @projects, :id, :name, :location, :user_id, :created_at
我的项目配置方式,created_at显示如下:"created_at":"2017-12-17T10:09:12.141Z"
。但是,根据ActiveSupport类的序列化行为,您可能仍会遇到问题。如果是这样,您可以通过调用方法进一步自定义输出:
json.array! @projects do |project|
json.extract! project, :id, :name, :location, :user_id
json.created_at project.created_at.utc
# Or perhaps something like:
# json.created_at project.created_at.in_time_zone.as_json
end
如果您的用例使jbuilder不合适,您可以使用其他序列化程序。
ActiveModel :: Serializer是一种常见的选择;您可以控制序列化的属性,还有控制这些属性序列化方式的机制。
class ProjectSerializer < ActiveModel::Serializer
attributes :id, :name, :location :created_at
belongs_to :user
end
但有一个重要的警告:我不能完全重现你的问题。在我创建的一个全新的极简主义的rails api项目中,来自render json: @projects, status: :ok
的返回json(没有jbuilder,没有自定义)为我返回“created_at”:“2018-02-28T02:31:10.603Z”,所以我想你需要弄清楚如何将ActiveSupport TimeWithZone实例插入到序列化格式中。它可能是您的应用程序配置导致的。
答案 2 :(得分:0)
不得不打电话:
img = imread(file); % returns img: (1024, 1024) with values [0, 1]
[img, cmap] = imread(file); % returns img: (1024, 1024) with values [0, 1], cmap (256x3)
在渲染JSON之前。
Project.where(company_id: @current_company.id).as_json
本身使用了额外的时区转换