我只是發現rails_timestamps會膨脹我的所有請求,事實上在很多情況下,不會。時間戳消耗的字符數多於我們實際需要的原始內容數量。通過覆蓋'serializable_hash'從全部json渲染中刪除'created_at'和'updated_at'
很多調試用的斷點後,我終於重寫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`正在許多地方使用(並且幸運的是它的工作原理沒有突破到目前爲止。)。 我正確的做法嗎?
這是否打破我的代碼隨時隨地?我應該面對什麼後果?
問題我有一個關於這一點:
是否有那些 'created_at' 和 '的updated_at' 時間戳特定的需求? 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
或
models/application_record.rb
內serializable_hash
類似的東西?
如果我使用'serializers',我需要創建'serializer'每個模型,做這將迫使我明確說明什麼屬性我需要_(顯然不包括** created_at **和** updated_at **)_因此無需全局覆蓋來排除字段...! –
,不幸的是'過濾器'也**不適合我**!從[repo]的結果(https://github.com/rails-api/active_model_serializers/search?utf8=%E2%9C%93&q=filter),它看起來像'json_api/deserialisation.rb'上的'filter_fields'是可以覆蓋的。我用'filter_fields'嘗試了你的解決方案,但仍然無法工作......我在'Rails 5.0.0.1'上使用'Ruby 2.3'和'Active Model Serializers 0.10.3' –
再一次,即使成功重寫,它不符合我們明確提及的領域,我們需要的目的! –