У меня есть приложение в rails, которое может отвечать как json, так и html.
Я хотел бы, что, когда запись возвращает ошибку при сохранении, то JSON ответ так:`rescue_from` исключение, только если формат 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
Я хотел бы, что это rescue_from
называется только тогда, когда формат JSON, иначе ведут себя стандартным образом (если формат HTML). Как я могу сделать что-то подобное?
UPDATE Я нашел решение, но я не думаю, что это очень хорошо:
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
Есть ли лучший подход?
вместо спасения от этого исключения, вы не должны поднять его в первую очередь. вот для чего нужны '.save' и' .errors'. если вы используете вызов 'response_with', рельсы автоматически возвращают статус' unprocessable_entity' и ошибки как json – phoet