我在rails中有一个可以响应json和html的应用程序 我喜欢这样,当一条记录在保存时返回错误时,json的回答是这样的:
{
"errors" : {
"slug" : [
"can't be blank"
],
"title" : [
"can't be blank"
]
}
}
所以我将此代码添加到我的ApplicationController
类。
rescue_from ActiveRecord::RecordInvalid do |exception|
render json: { errors: exception.record.errors },
status: :unprocessable_entity
end
我希望只有当格式为json时才调用此rescue_from
,否则以标准方式运行(格式为html时)。我怎么能这样做?
更新 我找到了一个解决方案,但我认为这不是很好:
rescue_from ActiveRecord::RecordInvalid do |exception|
respond_to do |format|
format.json do
render json: { errors: exception.record.errors },
status: :unprocessable_entity
end
format.html { fail exception }
end
end
有更好的方法吗?
答案 0 :(得分:0)
有一种更好的方法。
例如:
rescue_from ActionController::InvalidAuthenticityToken do |exception|
raise unless request.xhr?
render nothing: true, status: :unprocessable_entity
end