我只是发现rails_timestamps膨胀了我的所有请求,实际上在很多情况下,没有。时间戳占用的字符数量超过了我们实际需要的原始内容。
经过大量关于断点的调试后,我终于覆盖serializable_hash
而不是覆盖as_json
,当使用:include =>
时,它似乎不会被称为递归
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`在很多地方(幸运的是它可以在没有破坏的情况下工作..)。 我是以正确的方式做的吗?
这是否会破坏我的代码 ?我应该面对什么后果?
我对此有疑问:
是否特别需要那些&#39; created_at&#39;和&#39; updated_at&#39;时间戳? AFAIK我还没有详尽地使用它们:我只使用像Orders
这样的模型来获取或更新订单。
是否有一种简单的方法可以在默认情况下关闭这些时间戳,:include
仅在需要时 ,就像我们对associated_models
所做的那样?像
# serializers/application_serializer.rb
class ApplicationSerializer < ActiveModel::Serializer
except: :created_at, :updated_at
except: :id #in case we have uid-hash for all models and we don't want to send id for all models
except: :common_attrib_for_all_models
end
或serializable_hash
中的models/application_record.rb
内的类似内容?
答案 0 :(得分:0)
尝试添加serializers / application_serializer.rb
def filter(keys)
keys.delete :created_at, :updated_at
super(keys)
end