ruby-on-rails – 在ActiveModel :: Serializer中排序错误哈希

我正在使用ActiveModel :: Serializer自定义我的API的 JSON响应.这在大多数情况下工作正常,除非成功保存模型失败.

例如,

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

    respond_with book,location: nil
  end
end

据了解,respond_with操作将基本上执行看起来像这样的代码(为了生成响应).

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响应?

解决方法

我相信在这种情况下的问题是,对于失败的状态,您不会使用对象调用render,如创建状态.

调用render时可以使用一个自定义的Serializer,在这种情况下你可以使用类似的东西

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

尝试一下,告诉我们结果:)

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...