Я делаю вызов ActiveResource службе, и я хотел бы получить некоторые пользовательские сообщения об ошибках в качестве обратной связи. У меня есть некоторые проверки, которые не являются обычными проверками модели, поэтому я не могу просто вернуть @object.errors.
Вот, например, одно из моих подтверждений. Два объекта имеют отношения «многие ко многим», но я хочу ограничить один объект, чтобы он имел только ограниченное количество (скажем, 2) отношений с другими объектами. Вот код:
В клиенте:
response = Customer.find(customer_id).put(:add_user, :user_id => user_id)
Это помещает запрос на добавление пользователя в клиент. Потом в сервисе хочу проверить, действительно ли это дополнение.
def add_user
@user = User.find(params[:user_id])
@customer = Customer.find(params[:id])
if @customer.users.length > 2
render :xml => "ERR_only_2_users_allowed", :status => :unprocessable_entity
end
end
Вот моя проблема. В активном ресурсе, если статус возврата является ошибкой, клиентская сторона полностью выходит из строя. Я мог бы изменить статус на 200 и получить нормальное сообщение об ошибке тела, но это, похоже, противоречит цели наличия кодов ответа на ошибку.
Я могу поместить весь вызов запроса от клиента в блок начала/спасения
begin
response = Customer.find(customer_id).put(:add_user, :user_id => user_id)
rescue ActiveResource::ResourceInvalid => e
#return error code
end
но когда я перехватываю ответ 422 (unprocessable_entity), я ничего не получаю от тела, поэтому я не получаю свое собственное сообщение об ошибке. ответ = ноль
Кто-нибудь знает, как я могу получить эти пользовательские сообщения об ошибках с правильными кодами ответов?