2011-07-26 16 views
1

私はタイトルの中にあるものはおそらく不可能だと知っていますが、何か良いものを考え出すことはできませんでした。Ruby on Rails:モデルからの例外を含むオブジェクトを渡す

私の問題は、ActiveRecordを使用してデータを取得/保存するのではなく、Webサービス経由で専用のAPIを使用していることです。そのため、私はそれからいくつかの例外を処理する必要があります(例えば、メールを送信する)が、私はコード内の冗長性を避けるためにモデルでそれをしたいです。今私が思いついた唯一のアイデアは、アプリケーションコントローラで適切なアクションを生成するために、このWebサービスからの特定の応答に対する例外を発生させることです。残念ながら、私の行動の1つは、エラーを生成したWebサービスからのリクエストと応答を含む電子メールを送信することです。問題は、コントローラにそれらを渡すにはどうすればいいですか?

答えて

0

一般に、プログラムフローを処理するために例外を使用することは、悪い習慣とみなされます(しかし、とても便利です!= P)。

モデルからコントローラに明示的に制御を移す代わりに、ブロックをモデルに渡し、yieldを使用してそのブロックを実行する方法について説明します。このようにして、モデルが実行されることを望むときに、モデル内で実行中のコントローラからのコードを持つことができます。ここで

hello = "hello" 
def func 
    goodbye = "goodbye" 
    yield 
end 

func {hello = "world"} 

puts goodbye 

NameError: undefined local variable or method `goodbye' for #<Object:0x7fa85b7322a0> 
    from (irb):25 
    from :0 

puts hello 
"world" 

は、関数にコードを渡し、このコードブロックは、まだ呼び出し元のスタック領域内からの発信者(ハロー==「世界」から変数にアクセスできることを示す例だが、内部から実行されました関数)。それは私にとってはきれいだと感じます。

さて、関数内で定義された変数は、関数が終了するとスタックからポップされることを示しています。

関連する問題