2011-07-01 6 views
0

POST edのCSVファイルを処理し、無効な入力(CSV以外のファイルなど)に対してテストしている簡単なアプリを書いています。しかしレスキューがRailsでレスキューされない

@parsed_file = CSV::Reader.parse(params[:file]) rescue [] 

不適切提出があるときにレスキュー声明にもかかわらず、私はまだキャッチされないCSV::IllegalFormatErrorを取得しています、次のように私は、コントローラのメソッドでCSVを解析するためにCSV :: Reader.parseコマンドを使用しています入力されました。私はここで何が欠けていますか?

ありがとうございます!

+0

括弧で声明をラッピングしましたか? @parsed_file =(CSV :: Reader.parse(params [:file])レスキュー[]) 'のようになります。どのバージョンのルビーを使っているのですか? – diedthreetimes

+0

ええ、それは私にとってはうまくいきません。私は1.8.7を使用しています。これについて何も私には意味がありません... – justinbach

+0

これは機能しますか? '@parsed_file = raise CSV :: IllegalFormatError rescue nil'もしあなたがテストenvの外で実行するならば(つまりウェブサーバ経由で) – diedthreetimes

答えて

0

私は例外を正しく処理するために猿パッチCSV ::リーダークラスになってしまいました。それはコントローラに巻き込まれていませんでした、なぜ私はまだわからないんだけど、ここで私が執筆を終わったコードです:

class CSV 
    class Reader 
    def each 
     while true 
     row = [] 
     parsed_cells = get_row(row) rescue 0 
     if parsed_cells == 0 
      break 
     end 
     yield(row) 
     end 
     nil 
    end 
    end 
end 

rescue 0元に存在しないget_rowへの呼び出し、後には、 。間違いなく醜いハックですが、それは私の目的に役立ちます。

コントローラで例外がキャッチされなかった理由を誰かが説明できる場合は、正解がある点を喜んでお知らせします。

0

あなたは、解析するファイルハンドルを渡す必要があります。

@parsed_file = CSV::Reader.parse(File.open(params[:file], 'rb')) rescue [] 
+0

応答をありがとう...私はもはや元のCSV解析機能(正しく動作していた)を壊しているように、あなたの変更で何らかのエラーが発生しなくなっています。 @parsed_fileはファイルの有効性に関係なく空になっているようです。 – justinbach

+0

申し訳ありませんが、私はタイプミスがありました。今はどう? – glortho

+0

いいえ、同じ、残念ながら...送信されたファイルが有効なCSVかどうか、つまり例外が常にスローされ、@parsed_fileが常に[]に割り当てられているかどうかは同じです。 – justinbach

0

CSV::IllegalFormatErrorが正しくサブクラス化していないかのように聞こえますRuntimeError。またはRuntimeErrorをサブクラスStandardErrorに変更しました。

サブクラスStandardErrorがデフォルトレスキューブロックで捕捉されるエラーのみが表示されます。この理論を試すには、この問題を繰り返すことができない理由を説明してください。

明示的にExceptionを使用している場合はどんな場合でも動作し、サルパッチよりもきれいになります。

+0

あなたの説明は私には大変意味があります。私はあなたのコードスニペットを試したときに、非CSVの投稿を使用しているときに未知の 'IllegalFormatError'をまだ残していました。何が起こっているかもしれないかについての他の考え? – justinbach

関連する問題