rails 3 REST: проверка уничтожения активного ресурса - PullRequest
2 голосов
/ 03 января 2012

Привет всем, я использую active_resource и у меня следующий вопрос.иногда требуется проверка уничтожения. Пример

 def destroy
      if @user.destroy
        head :ok
      else
        respond_with(@user)
      end  
  end

Модель пользователя не может быть удалена в некоторых случаях.Если он не был удален, @user содержит ошибки после проверки before_delete, и респондент сериализует его таким образом => {\"errors\":{\"id\":[\"Cannot delete user with orders\"]}}

, но active_resource не обрабатывает такой ответ и завершается ошибкой с

ActiveResource::ResourceInvalid: Failed.  Response code = 422.  Response message = .

Как лучше всего справляться с такими ситуациями?

Ответы [ 2 ]

2 голосов
/ 09 января 2012

так я и сделал

module ActiveResource

  class Base
     def destroy_with_validation
         begin
           destroy
          rescue ActiveResource::ResourceInvalid=>error
            @remote_errors = error
            load_remote_errors(@remote_errors, true)
            return false
          end    
      end
 end
1 голос
/ 04 января 2012

До сих пор я никогда не использовал ActiveResource, однако я думаю, что это правильный способ реализации метода уничтожения ... или, по крайней мере, это способ REST.

Вы сказали, что ActiveResource не обрабатывает такой ответ, но на самом деле это как раз наоборот.Ошибка ActiveResource :: ResourceInvalid возникает из-за ответа 422 (Unprocessable Entity).

Дополнительная информация здесь: API ActiveResource

Вот что такое Resourceошибки часть говорит:

Следующие коды ответов HTTP также приведут к этим исключениям:

...

422 - ActiveResource :: ResourceInvalid (спасено сохранением как ошибки проверки)

Подводя итог, эти ошибки позволяют обрабатывать и вести себя точно в зависимости от возвращенного кода состояния.Например, вы не действуете одинаково, независимо от того, является ли ответ 503 (служба недоступна) или 422 (необработанный объект).В первом случае вы, вероятно, скажете: «Попробуйте позже», а во втором - «Невозможно сделать это из-за [сообщение возвращено]».

...