TL; DR
Использование: gem 'active_model_serializers', '~> 0.10.7'
Есть ли способ включить / исключить опции из сериализатора, когда они включены как отношения?Примерно так:
has_many :options, only: [:id, :name]
?
Подробности
У меня есть сериализатор:
class ProductSerializer < BaseSerializer
attribute :id, :name
has_many :options
end
Option
имеет свой собственный сериализатор, которыйвключает в себя несколько других атрибутов
class OptionSerializer < BaseSerializer
attribute :id, :name, :created_at, :updated_at
end
Однако при визуализации в отношении Product
я получаю все параметры из сериализатора.Но когда он указан как часть отношений (а не сам по себе), я хочу, чтобы отображались только id
и name
.Вот так:
{
"products": [{
"id": "704c5a2d-ef53-4cae-9d3f-132dc18c148a",
"name": "foo",
"options": [{
"id": "704c5a2d-ef53-4cae-9d3f-132dc18c148a",
"name": "bar"
}]
...
}
Если я переопределю отношения, я могу добраться туда:
def options
object.options.select(:id, :name)
end
... но 1) это кажется неаккуратным, и 2) это создает N + 1проблемы.Я также могу создать NestedOptionSerializer
, а затем использовать его для рендеринга, но это кажется излишним.
Существует ли более простой / понятный способ включения / исключения атрибутов, когда Serializer включен как отношение?Как то так?
has_many :options, only: [:id, :name]
?