0

フォームの「作成」アクションで、(1)MyObjectをローカルデータベースに保存し、(2)OtherObjectをRubyAPIを介してサードパーティのデータベースに保存しました。サードパーティへの保存で問題が発生すると、Ruby例外の形式でエラーが発生します。

私の質問は、フォームの送信を停止して例外メッセージをクライアントに報告するにはどうすればよいですか?

これが不可能な場合、最善の選択肢は何でしょうか?

4

1 に答える 1

1

ローカルデータベース呼び出しをロールバックするかどうかによっては、トランザクションの使用を検討することをお勧めします。これらの線に沿った何か:

def create
  ActiveRecord::Base.transaction do
    @myobject = MyObject.create!(params[:myobject])
    begin
      # call third-party
    rescue Exception => e
      flash[:exception] = e.message
      raise ActiveRecord::Rollback # Raise this to cause a rollback on MyObject
    end
  end
  # redirect_to or render... might have to pick depending on if you got an exception
end

これにより、例外メッセージがに保存flashされ、ユーザーに表示するために使用できます。Exceptionオブジェクト全体をに格納しないflashでください。例外オブジェクトが大きすぎると、オーバーフローエラーが確実に発生します。

作成をロールバックすることについてあまり心配していない場合はMyObject、単純なbegin...rescue私の例で示したものと同様のものを使用できます。redirect_toを実行するかどうか、または例外が発生したかどうかに応じて判断する必要がある場合がありますが、発生したかどうかにrender基づいて、いつでも条件付きで判断できます。flash[:exception].nil?true

于 2013-02-01T01:11:27.283 に答える