0

モデルのインスタンスを作成する前に、外部のWebサイトにアクセスする必要があるモデルがあります。エラー回復のベストプラクティスと見なされるものは何ですか?モデルを作成していないので、モデルでクラスメソッドを使用していることに注意してください。

(コントローラーではなく)モデルのエラーを救済することは正しいと感じますが、エラーをコントローラーに伝えるための最良の方法は何ですか?次のコードの問題は、モデルがnilを返すため、コントローラーが失敗した内容をユーザーに提供できないことです。

class MyModel < ActiveRecord::Base
  def self.lookup(address)
    begin
      return web_lookup(address)
    rescue SocketError
      return nil
    end
  end
end

class MyModelsController < ApplicationController
  def create
    info = MyModel.lookup(params[:address])
    if info
      MyModel.create(:info => info)
    else
      flash_message('cannot lookup info') # I'd like to tell the user what failed here
    end
  end
end

これにどのようにアプローチしますか?

(追記:モデルコードでMyModel.new(:info => info)を呼び出して、それをコントローラーコードに返すことができます。これにより、モデルインスタンスにエラーを割り当てることができます[右?]が、そうではありません。それがパブリックAPIの一部であることを確認してください。それは機能しますか?もしそうなら、どのように記述しますか?)

4

1 に答える 1

1

コントローラーでこれを確実に救出してください。管制官は交通警官であり、交通を適切な場所に誘導する責任があります。外部サーバーへの接続、および障害時の対応するエラー処理は、そのトラフィック処理の一部であるため、100%のコントローラーの役割を果たします。

于 2011-07-08T16:44:49.280 に答える