RailsでAPIを作ってます。通常のRailsアプリ同様、ユーザから送られてきたパラメータが正しいかどうかを検証するためバリデーションを実行しています。しかし、Railsにビルドインされている基本的なバリデーション以外に、独自にカスタムバリデーションを作っているのですが、ユーザから不正な値が送られてきた時に拾うべき例外が色々ありすぎてちゃんと例外を網羅できているのか、不安になります。
たとえば、ユーザから、year
month
day
の3つの整数がパラメータとして送られてきて、year/month/day
で表される日付が存在するかどうかを検証することを考えています。(2017/7/31
は存在しうる日付なので許可し、一方2017/7/32
は存在し得ない日付なのでエラーをあげる、という具合です。)
そこで、以下のような関数を考えました。
ruby
1 def valid_date 2 errors[:base] << '日付の値が不正です。' unless set_date 3 end 4 5 def set_date 6 begin 7 date = Time.zone.parse('%#04d-%#02d-%#02d 00:00:00' % [self.year, self.month, self.day]) 8 rescue ArgumentError 9 self.date = nil 10 end 11 end
ここでは、存在し得ない日付が入力されたときにArgumentError
を捕捉するようにしてるんですが、はたしてコレで充分か?という疑問が常につきまとうのです。たとえば、self.yearが存在しなければ、また別のエラーが吐かれてArgumentError
では捕捉できないのではないか? と思うのです。
そのような疑念を払拭するにはどうすればよいのでしょうか。RubyやRailsの例外を全部覚える必要があるのでしょうか。
もし、あらゆる例外を捕捉してくれる便利な仕組みがあれば、それを使いたいのですが、そのような仕組みはあるのでしょうか。。。。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/09 00:39