Это может быть или не быть вашей проблемой, но оба из нас кажутся очень близкими. Я использую нестандартный метод пут, но он должен работать и для вас. Что происходит, так это код, который делает это:
rescue ResourceInvalid => error
errors.from_xml(error.response.body)
end
Работает только со стандартным методом сохранения. Если вы хотите, чтобы при вызове других методов добавлялись ошибки, похоже, вам нужно сделать это самостоятельно.
Я должен был добавить это к
продавец / Перила / activeresource / Библиотека / active_resource / custom_methods.rb
Вот как выглядит мой diff из git:
старый код:
def put(method_name, options = {}, body = '')
connection.put(custom_method_element_url(method_name, options), body, self.class.headers)
end
новый код:
def put(method_name, options = {}, body = '')
begin
connection.put(custom_method_element_url(method_name, options), body, self.class.headers)
rescue ResourceInvalid => error
errors.from_xml(error.response.body)
end
self
end
Итак, посмотрите на трассировку стека, когда получите исключение для 422, и посмотрите, какой именно метод он вызывает. Затем добавьте что-то вроде того, что у меня есть, и вам будет хорошо.
Не спрашивайте меня, почему ребята из активных ресурсов считают, что валидация должна работать только с их методом сохранения. метод save создает или обновляет, но вызов 'put or post' - это то же самое, IMO. Если мы хотим, чтобы проверки работали над сохранением, мы хотим, чтобы они работали над положением и отправкой ... в любом случае, сделайте это.
Я не уверен, что мне нужно само в конце ... я не могу. Я не совсем закончил с этим, так как я просто понял, как заставить это работать.
Erik