Rails 5 API - как создать и использовать собственный сериализатор с Active Model Serializer для одной и той же модели - PullRequest
0 голосов
/ 08 марта 2019

Как можно создать собственный сериализатор для той же модели? Я уже определил ShopSerializer следующим образом:

#serializers/shop_serializer.rb

class ShopSerializer < ActiveModel::Serializer
  attributes :category,:name, ...#other attributes

  belongs_to :country
end

Я хотел бы определить пользовательский, который включает в себя все отношения:

module Api
  class ShopSerializer < ActiveModel::Serializer
    attributes :category, ... other attributes

    belongs_to :country
    has_one :address
    has_one :client_relation
    has_many :events
    has_many :services
    has_many :descriptions
  end
end

В controllers/v1/api/shops_controller.rb:

module V1
  module Api
    class ShopsController < ApiController

      def show
        @shop = Shop.some_fancy_method(params[:identifier])
        render jsonapi: @shop, serializer: Api::ShopSerializer
      end
    end
  end
end

, и это не с:

#<NoMethodError: undefined method `read_attribute_for_serialization' for #<Shop::ActiveRecord_Relation:0x00007f8e07d5cd88>>",

Что с этим связано? Чего мне не хватает?

Спасибо.

1 Ответ

1 голос
/ 08 марта 2019
#<NoMethodError: undefined method `read_attribute_for_serialization' for #<Shop::ActiveRecord_Relation:0x00007f8e07d5cd88>>"

Подразумевается, что вы пытаетесь сериализовать активное отношение, содержащее магазин внутри него, а не только сам магазин.

Должен ли @shop возвращать отдельный магазин?Если так, то:

render jsonapi: @shop.first, serializer: Api::ShopSerializer

Должно работать, но, очевидно, лучше всего сначала исправить переменную @shop

...