エラー処理
現時点では、URL無しやURLがめちゃくちゃだとエラーが発生します。
上記のような表示だと、エラー内容が分かりづらくユーザーに伝わりません。これを、以下のようにエラー内容がわかるようにしていきます。このような、エラー処理のことをエラーハンドリングといいます。
例外処理を使う
例外処理を使ってエラーハンドリングを行います。以下のようにデタラメなURLで保存された場合に「無効なURLです」と表示されるようにします。
例外処理の書き方は以下のようにrescueを使って処理します。文法は以下の通りになります。
では、エラーが発生する部分を追加してみます。
begin
meta = MetaInspector.new(@clip.url)
@clip.title = meta.title
@clip.description = meta. best_ description
@clip.image = meta.images.best
rescue
end
これでエラーはなくなります。しかし、このままだとエラーは無視されて保存されてしまいます。中身はからっぽのまま保存されてしまうので、これは良くないですよね。
これを防ぐために、エラーが起こった後の処理を書いて、保存されずにエラーメッセージが出るようにしてみましょう。
begin
meta = MetaInspector.new(@clip.url)
@clip.title = meta.title
@clip.description = meta. best_description
@clip.image = meta.images.best
rescue
@clip.errors.add(:base, "無効なURLです")
render :new
return
end

@clip.errors.add(:base, "無効なURLです")って何?
オブジェクトを保存する時に問題がある場合にはRailsはエラーを返しますよね。例えばvalidationの設定をしているときなどは「文字が短すぎますよー」などのエラーが返ってくる場合があると思います。実は、これらのエラーは@オブジェクト.errorsの中に入っていて、それを表示しているのです。今回のresueでやっている部分は、MetaInspectorでエラーが起こった場合に、そのエラーをオブジェクトに加えているということですね。ちょっと難しいですが、まぁエラーメッセージが出るようにしていると考えて良いでしょう。
これで、保存されずにエラーメッセージが表示されるはずです。ブラウザで試してみましょう。
課題
エラー処理を実装して完成させましょう。
まとめ
この教程では、MetainspectorというURLを入力すると自動でMeta情報を取ってきてくれるgemの実装を行いました。また、実装する中でデバッグ(バグを見つけて修正する)やエラー処理についても学びました。