我在Rails 6 API中遇到性能问题。
class OfferSerializer < ActiveModel::Serializer
attributes :id, :ident, :label, :slug, :pagetitle, :description
has_many :users, serializer: UserSerializer
用户具有许多属性,我不需要呈现报价。有没有办法在这里约束用户属性?在呈现用户时,我需要所有用户属性,因此无法在用户序列化程序中减少它。
不确定确切的性能问题是什么,而罪魁祸首是否是对所有字段进行序列化的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
希望这会有所帮助。