2011-12-27 11 views
2

私はTwitterの宝石で簡単なRailsアプリケーションを作っています。アプリケーションは、フォームセレクトから値を選択するようにユーザーに求め、ツイートに入れます。ユーザーはフォームセレクトから値を選択しているので、デフォルト値があるので、ユーザーが「Twitterに投稿する」ボタンに気をつけてクリックすると、Twitterで禁止されている重複ツイートが作成される可能性が高くなります更新アクションのエラーを処理する方法(Twitterのgemを使用)

Twitter::Error::Forbidden in SessionsController#update

Status is a duplicate.

したがって、このnoobのは、彼の最初のエラーハンドラに

def update 
    @twit = "@TwitterUser #{params[:wants]} to go to #{params[:place]} " 

    begin 
     client.update(@twit) 
     redirect_to show_path, :notice => "' ' + #{params[:wants] + ' ' + params[:place] has been tweeted}" 

    rescue Exception 
     redirect_to show_path, :notice => "Hey Loser, Twitter says you cannot post same twice" 
    end 
    end 

問題を作成しようとしている私は2回連続で同じメッセージを投稿していないときは時々、それはエラーメッセージを示しています。私は、エラーメッセージがどうにかして固執しているのだろうか、それを行うかもしれないような方法でアクションを書いたのだろうか?

エクストラエラーメッセージを含めようとしたのはこれが初めてです。私はそれが正しいか間違っているのか、それとも良くできているのか分かりません。もしあなたがこのコードがどこに行くのかについてのヒントがあれば...非常に感謝しています。例えば、私は同じエラーを起こす可能性があるいくつかのフォーム/アクションを持っていますので、私が使用できるDRYテクニックはありますか?

答えて

0

他のタイプのエラーがスローされている可能性があります。「スティッキング」ではありません。 Exceptionが投げられている(そしてレスキューされている)かどうかを確認するには、エラーログをトレースする(またはデバッガを使用する)必要があります。あなたもそうのように、さまざまな例外をテストするために、複数の救助ケースを使用することができます。

begin 
    client.update(@twit) 
    redirect_to show_path, :notice => "' ' + #{params[:wants] + ' ' + params[:place] has been tweeted}" 
rescue Twitter::Error 
    redirect_to show_path, :notice => "Hey Loser, Twitter says you cannot post same twice" 
rescue Exception 
    puts "some other error happened!" 
end 

別のオプションは、にエラーを処理するため、割り当てを行い評価し、そのような任意の例外を発生させることです。

begin 
    response = client.update(@twit) 
    if !response 
     raise "something went wrong!" 
    else 
     redirect_to show_path, :notice => "' ' + #{params[:wants] + ' ' + params[:place] has been tweeted}" 
    end 

rescue Exception 
    redirect_to show_path, :notice => "Hey Loser, Twitter says you cannot post same twice" 
end 
+0

ので、 2番目の例では、ユーザーが2つのエラーメッセージ「何かが間違っています」を表示し、さらに詳しい説明「Hey Loser ...」か、別々のエラーですか? – Leahcim

+0

2番目の例では、client.update(@twit)がTwitter :: Errorをスローすると、beginブロックから返され、レスキューブロックに置かれます(したがって、if/elseを実行することはありません) ... – edwardsharp

関連する問題