Optimise Rails Serializer

问题描述 投票:1回答:1

我在Rails 6 API中遇到性能问题。

class OfferSerializer < ActiveModel::Serializer
attributes :id, :ident, :label, :slug, :pagetitle, :description
has_many :users, serializer: UserSerializer

用户具有许多属性,我不需要呈现报价。有没有办法在这里约束用户属性?在呈现用户时,我需要所有用户属性,因此无法在用户序列化程序中减少它。

ruby-on-rails api serializer
1个回答
0
投票

不确定确切的性能问题是什么,而罪魁祸首是否是对所有字段进行序列化的UserSerializer,但如果需要选择应序列化的属性,则应该能够执行以下操作:

class OfferSerializer < ActiveModel::Serializer

  attributes :id, :ident, :label, :slug, :pagetitle, :description
  has_many :users, serializer: UserSerializer, attributes: [:id, :name, :whatever]

  # ...
end

您还可以仅为此目的创建自定义序列化程序,例如LightweightUserSerializer:

class LightweightUserSerializer < ActiveModel::Serializer
  attributes :id, :name # ...
end

然后使用它:

class OfferSerializer < ActiveModel::Serializer

  attributes :id, :ident, :label, :slug, :pagetitle, :description
  has_many :users, serializer: LightweightUserSerializer

  # ...
end

希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.