Это происходит потому, что метод Serializer.attributes
называть каждое поле с помощью метода ActiveModel.read_attribute
. Этот метод применит некоторые валидации, например validates_presence_of
по определению модели, что вызовет исключение. Чтобы избежать этого я даю три плохим решением и после лучше и просто один:
- Измените определения модели, но вы упустите проверку.
- Перезапишите метод
ActiveModel.read_attribute
, чтобы справиться с этим поведением, вы получите новые проблемы.
- Перезаписать
Serializer.attributes
и вместо того, чтобы позвонить super, позвоните по телефону object.attributes
.
Но лучшим вариантом будет создание нового класса сериализации, чтобы избежать помимо эффектов, с единственными полями, которые вы хотите. Затем укажите это в классе контроллера:
render json: People.all.reduced, each_serializer: SimplePersonSerializer
Edit 1
Правильный ответ должен быть один из Maurício Linhares.
render json: result.to_json(only: array_of_fields)
Не разрешает проблему, вызванную фильтрацией после поиска всех атрибутов, поэтому ошибка все равно возникает. – Adamantish