2012-01-03 12 views
2

こんにちはすべて私はactive_resourceを使用しており、次の質問があります。 は時々、検証に必要な 例rails 3 REST:activeresource破壊の検証

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を使ったことはありませんが、これは破壊方法を実装する正しい方法だと思います。少なくともREST方法です。

あなたは、ActiveResourceはそのような応答を処理しないと言っていますが、実際はそれはまったく逆です。 ActiveResource :: ResourceInvalidエラーは、422(Unprocessable Entity)応答のために発生します。ここ

もっとに関する情報:

次のHTTPレスポンスコードはまた、これらの例外が発生します:

...

ここ API ActiveResource

リソースエラー一部が言うことです

422 - ActiveResource :: ResourceInvalid(検証エラーとして保存して救済)

これらのエラーをまとめると、返されたステータスコードに応じて正確に処理して動作させることができます。たとえば、レスポンスが503(Service Unavailable)であるか422(Unprocessable Entity)であるかは同じ方法で動作しません。最初のケースでは、おそらく "後で試してください"と言い、2番目のケースでは "[返されたメッセージ]のためにできません"と言います。

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 
関連する問題