ruby-on-rails - 在ActiveModel::Serializer中序列化错误哈希

标签 ruby-on-rails json serialization ruby-on-rails-4 active-model-serializers

我正在使用ActiveModel::Serializer为我的API自定义JSON响应。在大多数情况下,这都可以正常工作,除非无法成功保存模型。

例如,

def create
  def create
    book = Book.new(book_params)
    book.save

    respond_with book, location: nil
  end
end

据我了解,response_with Action 将基本上执行看起来像这样的代码(以便生成响应)。
  if resource.errors.any?
    render json: {:status => 'failed', :errors => resource.errors}
  else
    render json: {:status => 'created', :object => resource}
  end

这确实与我所看到的相符-如果我的模型无法成功保存,我将看到错误哈希作为响应。但是,我不知道如何为错误哈希指定序列化器。

我尝试定义一个ErrorsSerializer,如果我运行
ActiveModel::Serializer.serializer_for(book.errors)

在控制台中,似乎找到了我的序列化器,但没有被使用。在这种情况下,如何自定义JSON响应?

最佳答案

我相信在这种情况下的问题是,对于failed状态,您不会像对象一样为render状态调用对象的created

您可以在调用render时使用自定义序列化程序,在这种情况下,您可以使用类似

if resource.errors.any?
  render serializer: ErrorSerializer, json: {:status => 'failed', :errors => resource.errors}
else
  render json: {:status => 'created', :object => resource}
end

试试看,让我们知道结果:)

关于ruby-on-rails - 在ActiveModel::Serializer中序列化错误哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25474294/

相关文章:

wcf - EF4 自跟踪实体和 WCF 序列化导致堆栈溢出

c# - C# Dictionary<string, List<string>>.GetObjectData() (serialization) 是否一致?

ruby-on-rails - 使用 ActiveMerchant 和 PayPal 在实时网站上接受虚拟信用卡

javascript - Rails 中的基本 API

javascript - Json 数据未呈现到 DOM

arrays - 如何在 Swift 中使用未知 key 解码 JSON 响应?

javascript - 通过 javascript 迭代 YQL JSON 结果 geo.places

ruby-on-rails - Rails 部分的屈服

android - 构建 Rails 网络应用的移动应用衍生产品

php - wordpress 以智能方式显示反序列化数据