繁体   English   中英

当对象保存失败时,以数据为根的activemodel序列化程序

[英]activemodel serializers with data as root when object is failed to save

我正在为我的api使用activemodel序列化程序来序列化数据模型。

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
  }
}

但是,当参数无效且用户对象未保存到db时,它将作为根返回而没有数据。 例:

{
  "email": [
    "has already been taken"
  ]
}

我不确定缺少什么,但是我只想让api以root身份返回数据,以解决失败的情况。 顺便说一句,用户序列化程序仅包含id属性。

您可以在json中指定它:

def render_error(errors, status = :unprocessable_entity)
  meta = { count: errors.messages.count }
  render json: { data: errors }, status: status, meta: meta
end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM