体調グラフ機能, 該当期間のy軸の値を吐き出すメソッドに例外処理を実装する(Rails, Ruby)

アプリ制作

実現したいこと(1)

Diaryレコードが存在しない期間を指定した際に、app/lib/generate_report/weekly_report.rbdata_generatorメソッドでエラーが発生してしまう。レコードが存在しない場合でも値を0としてグラフの描画を行えるようにしたい。

def data_generator(user, column, date_begin)
  records = user.diaries.group_by_week(week_start: :mon) { |n| n.diary_date }
  ## レコードが存在しない期間を指定すると, Hashで存在していないキー指定するためnilが返る
  ## nilの場合にエラー, 
  records[date_begin].map do |diary|
    diary.send(column)
  end
end

どのように実装するか?

records[date_begin]nilかどうか確かめ、nilの時は配列のnilの要素を7個作成して返す。

def data_generator(user, column, date_begin)
  records = user.diaries.group_by_week(week_start: :mon) { |n| n.diary_date }
  if recordes[date_begin].present?
    records[date_begin].map do |diary|
      diary.send(column)
    end
  elsif records[date_begin].nil?
    7.times.map { |n| nil }
  else
    raise "Error"
  end
end

手動でテスト

  • 今週(10/14-10/20)のレコードを削除し, 今週の体調グラフにアクセスし以下の項目を確認
    • エラーが発生しないか?
    • グラフの縦軸の値が何も表示されていないか?
  • テスト成功

実現したいこと(2)

statistics/:column/from/:date_begin/to/:date_endでグラフ描画をする

どのように実装するか?

lib下のDateConstraintクラスでURIの/:date_begin, /:date_endを Date.valid_date?メソッドで検証する(year, month, dayでマッチデータオブジェクトを生成してメソッドに代入)

コントローラでparams[:date_begin], params[:date_end]をインスタンス変数にセット

コントローラでweekly, monthlyで場合分けしてReportクラスへ渡す

PERIODSに該当する場合はリダイレクト?

その他に実装したこと

/statistics/:column/period/thisMonth(or prevMonth)でグラフ描画できるようにした。

プロを目指す人のためのRuby入門

  • 例外処理について