首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过重写'created_at‘从所有json呈现中全局删除'updated_at’和'serializable_hash‘

通过重写'created_at‘从所有json呈现中全局删除'updated_at’和'serializable_hash‘
EN

Stack Overflow用户
提问于 2016-11-28 08:11:49
回答 1查看 569关注 0票数 0

我只是发现rails_timestamps正在膨胀我的所有请求,事实上,在许多情况下,没有。时间戳消耗的字符比我们实际需要的原始内容还要多。

在使用断点进行了大量调试之后,我终于重写了serializable_hash,而不是重写as_json,当使用:include =>时,似乎不递归地调用它。

代码语言:javascript
复制
class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true

  # Ignore created_at and updated_at by default in JSONs 
  # and when needed add them to :include
  def serializable_hash(options={})
    options[:except] ||= []
    options[:except] << :created_at unless (options[:include] == :created_at) || (options[:include].kind_of?(Array) && (options[:include].include? :created_at))
    options[:except] << :updated_at unless (options[:include] == :updated_at) || (options[:include].kind_of?(Array) && (options[:include].include? :updated_at))

    options.delete(:include) if options[:include] == :created_at
    options.delete(:include) if options[:include] == :updated_at
    options[:include] -= [:created_at, :updated_at] if options[:include].kind_of?(Array)

    super(options)
  end

end

到目前为止,它工作得很好,满足了我从基本到中等的所有需求,但后来我明白我需要继续前进,开始使用active-model-serializers,但从文档来看,似乎'serializable_hash`在许多地方都被使用了(幸运的是,它没有中断……)。,我这样做对吗?

这会破坏我的密码吗?我要面对什么后果?

我对此有疑问:

  • 对那些“created_at”和“updated_at”时间戳有什么特别的需求吗?AFAIK --我还没有详尽地使用过它们:我只使用像Orders这样的模型,以便在下订单或更新订单时得到它们。
  • 是否有一种简单的方法可以在默认情况下关闭这些时间戳,并且只在需要的情况下:include ,就像我们对associated_models那样?类似于序列化器/application_erializer.rb类ApplicationSerializer models/application_record.rb中的serializable_hash中有类似的东西。
EN

回答 1

Stack Overflow用户

发布于 2016-11-30 07:20:56

尝试添加序列化器/application_erializer.rb

代码语言:javascript
复制
def filter(keys)
  keys.delete :created_at, :updated_at
  super(keys)
end
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40839687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档