как использовать рендеринг json: с драгоценным камнем Active-Model-Serializers?

я использую gem 'active_model_serializers', '~> 0.10.0' для форматирования json с версионером gem для менеджера API версии

я пишу контроллер клонирования для экспорта json следующим образом:

#app/v1/products_controller
class V1::ProductsController < V1::BaseController
  start_offset = params[:offset]
  max_products = Product.all.size
  products = Product.all.limit(Settings.limit_products_json).offset start_offset
  next_number = start_offset.to_i + Settings.limit_products_json

  if next_number < max_products
    render json: {
      products: products,
      next_products: Settings.next_products_json + next_number.to_s,
      product_end: Settings.product_end_false_json
    }
  else
    render json: {
      products: products,
      product_end: Settings.product_end_true_json,
      product_end_reason: Settings.product_end_reason_json
    }
  end
end

и в папке сериализаторов я пишу:

#serializers/v1/product_serializer.rb
class V1::ProductSerializer < ActiveModel::Serializer
  attributes :id, :name
end

и результат - все атрибуты продукта в json. Но я хочу ограничить результат продукта только :id и :name, как я написал в классе V1::ProductSerializer. Как я могу это сделать? Извините за мой плохой английский!


person kevin    schedule 09.02.2017    source источник


Ответы (1)


Насколько я знаю, active_model_serializers не поддерживает управление версиями из коробки. Либо переименуйте свой сериализатор в ProductSerializer, либо явно укажите параметр each_serializer и поместите другие параметры в мета:

meta = if next_number < max_products
  {
    next_products: Settings.next_products_json + next_number.to_s,
    product_end: Settings.product_end_false_json
  }
else
  {
    product_end: Settings.product_end_true_json,
    product_end_reason: Settings.product_end_reason_json
  }
end

render json: products, each_serializer: V1::ProductSerializer, meta: meta
person Slava.K    schedule 09.02.2017