我正在使用ActiveModel :: Serializer自定义我的API的
JSON响应.这在大多数情况下工作正常,除非成功@R_987_301@失败.
@H_404_2@例如,
def create def create book = Book.new(book_params) book.save respond_with book,location: nil end end@H_404_2@据了解,respond_with操作将基本上执行看起来像这样的代码(为了生成响应).
if resource.errors.any? render json: {:status => 'Failed',:errors => resource.errors} else render json: {:status => 'created',:object => resource} end@H_404_2@这与我正在看到的匹配 – 如果我的模型无法成功保存,我会看到错误哈希作为响应.但是,我无法弄清楚如何为错误哈希指定序列化程序. @H_404_2@我尝试定义一个ErroRSSerializer,如果我运行
ActiveModel::Serializer.serializer_for(book.errors)@H_404_2@在控制台中,似乎找到了我的序列化程序,但它没有被使用.在这种情况下如何自定义JSON响应?
解决方法
我相信在这种情况下的问题是,对于失败的状态,您不会使用对象调用render,如创建状态.
@H_404_2@调用render时可以使用一个自定义的Serializer,在这种情况下你可以使用类似的东西
if resource.errors.any? render serializer: ErrorSerializer,json: {:status => 'Failed',:errors => resource.errors} else render json: {:status => 'created',:object => resource} end@H_404_2@尝试一下,告诉我们结果:)