Как скрыть created_at и updated_at при использовании ActiveModel::Serializer

Я использую active_model_serializers в приложении rails, оно работает отлично, но при работе с ассоциациями оно возвращает все атрибуты связанной модели (включая created_at и updated_at), которые я не хочу возвращать.

class ReservationSerializer < ActiveModel::Serializer
 attributes :id, :pnr_no, :train_no, :passenger_name, :from_to, 
 :travel_class, :cancelled, :travel_time
 has_many :reservation_seats
end

 ...
 attributes of reservation are returned, which are fine therefore only 
 including the relationship attributes i.e for reservation_seats
...

"relationships": {
    "reservation-seats": {
      "data": [
        {
          "id": 4,
          "reservation-id": 5,
          "seat-no": "26",
          "position" : "2",
          "created-at": "2017-05-27T23:59:56.000+05:30",
          "updated-at": "2017-05-27T23:59:56.000+05:30"
        }
      ]
    }

Я также попытался создать новый файл, в котором я определил атрибуты, которые необходимо вернуть, но в этом случае он просто возвращает только тип.

class ReservationSeatSerializer < ActiveModel::Serializer
  attributes :id, :seat_no, :position
  belongs_to :reservation
end

это приводит к:

"relationships": {
    "reservation-seats": {
      "data": [
        {
          "id": "4",
          "type": "reservation-seats"
        }
      ]
    }
  }

В основном для ассоциации я хочу вернуть только несколько атрибутов.

Спасибо


person Vibhoo Mishra    schedule 27.05.2017    source источник
comment
Будет намного легче ответить на этот вопрос, имея больше контекста. Пожалуйста, добавьте код, который не работает, особенно контроллер и сериализаторы. Также добавьте существующий неправильный вывод и приведите пример вывода, который вы хотели бы получить.   -  person messanjah    schedule 27.05.2017
comment
добавлен пример кода   -  person Vibhoo Mishra    schedule 27.05.2017
comment
Вы пытались добавить belongs_to к ReservationSeatSerializer ?   -  person SteveTurczyn    schedule 27.05.2017


Ответы (2)


Спецификация JSON API требует, чтобы вы сократили данные ответа и запросы к базе данных, просто включив тип и идентификатор отношения. Если вы хотите включить связанный объект, вы должны включить его:

Пример ActiveModelSerializer:

render json: @reservation, include: '*'

Это включает все отношения рекурсивно. Эти связанные объекты окажутся в массиве included.

Взгляните на спецификацию JSON API и документы active_model_serializer.

person Tobias    schedule 27.05.2017

Вы можете попробовать добавить сериализатор вашей ассоциации внутри него:

class ReservationSerializer < ActiveModel::Serializer
  attributes :id, :pnr_no, :train_no, :passenger_name, :from_to, 
  :travel_class, :cancelled, :travel_time
  has_many :reservation_seats

  class ReservationSeatSerializer < ActiveModel::Serializer
    attributes :id, :seat_no, :position
  end
end
person Alter Lagos    schedule 28.05.2017
comment
Все еще не работает, он возвращает те же отношения: {резервирование мест: {данные: [{id: 1, тип: резервирование мест} ]} - person Vibhoo Mishra; 28.05.2017