2012-01-03 1 views
2

Привет всем Я использую active_resource и задаю следующий вопрос. иногда есть уничтожить проверки необходимости Примераrails 3 REST: activeresource destroy validation

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 = . 

, что является лучшим способом для обработки таких ситуаций?

ответ

1

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

Вы сказали, что ActiveResource не обрабатывает такой ответ, но на самом деле это точно противоположное. Ошибка ActiveResource :: ResourceInvalid возникает из-за ответа 422 (необработанная сущность).

Больше информации здесь: API ActiveResource

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

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

...

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

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

2

поэтому я сделал так

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 

 Смежные вопросы

  • Нет связанных вопросов^_^