Я использую сериализатор activemodel для моего api для сериализации моделей данных.activemodel serializers с данными как root, когда объект не удалось сохранить
class Api::V1::UsersController < Api::V1::ApiController
include ::ActionController::Serialization
def create
user = User.new(user_params)
if user.save
return render json: user, status: :ok, root: :data
end
render_error(user.errors)
end
private
def user_params
params.require(:user).permit(:email, :password)
end
def render_error(errors, status = :unprocessable_entity)
meta = { count: errors.messages.count }
render json: errors, status: status, meta: meta, root: :data
end
end
Когда пользовательские параметры действительны и сохраняются в db, api возвращает данные с правами root. Например:
{
"data": {
"id": 11
}
}
Однако, когда параметры не являются действительными и объект пользователя не сохраняется в БД, она возвращает без данных как корень. Пример:
{
"email": [
"has already been taken"
]
}
Я не уверен, что я не хватает, но я просто хочу апи возвращать данные как корень для также неудавшегося сценария. Btw, пользовательский сериализатор включает только атрибут id.