モデルのインスタンスを作成する前に、外部の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の一部であることを確認してください。それは機能しますか?もしそうなら、どのように記述しますか?)