モデルのインスタンスを作成する前に外部Webサイトにアクセスする必要があるモデルがあります。エラーリカバリのベストプラクティスとは何ですか?私はモデルを作成していないので、モデルのクラスメソッドを使用することに注意してください。モデルまたはコントローラでネットワーク接続エラーを救済するには?
(コントローラではなく)モデルのエラーを救済するのは正しいと思いますが、コントローラにエラーを伝える最も良い方法は何ですか?
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
をあなたがこれをアプローチする方法を次のコードの問題は、モデルがnilを返すので、コントローラが失敗したものをユーザーに任意のヒントを提供することができないということでしょうか?
(PS:モデルコードでMyModel.new(:info => info)を呼び出してコントローラコードに戻すことができます。これはモデルインスタンス[right?]にエラーを割り当てますそのAPIが公開APIの一部であるかどうかはわかりませんが、その場合はどうすれば記述できますか?)
私は、WebアクセスがDelayed Jobまたは同等のものの下で処理されるべきであることを認識しています。そのため、物事の構造が根本的に変わることになります。それにもかかわらず、あなたの答えは理にかなっています。 –