在控制器中,我想用
使用
respond_with
替换if..render..else..render
:# Current implementation (unwanted)
def create
@product = Product.create(product_params)
if @product.errors.empty?
render json: @product
else
render json: { message: @product.errors.full_messages.to_sentence }
end
end
# Desired implementation (wanted!)
def create
@product = Product.create(product_params)
respond_with(@product)
end
使用
respond_with
存在的问题是,在验证错误的情况下,JSON以特定的方式呈现,不符合客户端应用程序的预期:# What the client application expects:
{
"message": "Price must be greater than 0 and name can't be blank"
}
# What respond_with delivers (unwanted):
{
"errors": {
"price": [
"must be greater than 0"
],
"name": [
"can't be blank"
]
}
}
产品,价格和名称是示例。我希望整个应用程序都能实现这种行为。
我正在使用responders gem,我已经阅读了可以自定义responders和serializers的资料。但这些组件如何配合使用呢?
如何定制respond_with
在验证错误时呈现的JSON?
respond_with(@product)
这样的响应器,并为错误响应自定义错误布局。 - João Souzarespond_with
(而不是render json:
),并且在验证错误的情况下,渲染一个包含“message”节点的JSON,其中所有完整的错误消息都被连接成一个句子 - 同样,在控制器中使用respond_with
,而不是render json:
。 - João Souza