2021年04月04日に参加
学習履歴詳細
サービスクラスにグラフ描画に関する処理を移す
アプリ制作
昨日のエラー
Constraint::PeriodConstraint
クラスで, /statistics/activity/period/thisWeek
の"thisWeek"の部分が正しいURIになっているか検証するように実装した。
しかしno route matchedエラーが出てしまい、うまく作動していない。原因がわからなかった。
module Constraint class SelectPeriodConstraint PERIODS = ['thisWeek', 'thisMonth', 'prevWeek', 'prevMonth'] def matches?(request) PERIODS.include?(request.query_parameters['period']) end end end
binding.pry
で確認してみるとrequest.query_parameters['week_or_month']
がnil
になっていた。requestはActionDispatch::Requestクラスだと分かったので、ドキュメントを確認するとparamsメソッドでURIのセグメントにアクセスできると分かり、解決。
本日実装した機能
/statistics/:column/period/:period
で期間を指定してグラフを描画する機能:period
セグメントをRouting時に検証する(RailsGuideのAdvanced Constraintsを使用)- Weeklyのグラフ描画時に前後1週間へのリンクを生成する機能
- 表示しているカラム以外の、2つのカラムへのリンクを生成する機能
- activity, mood, appetiteのうち、 activityを表示している時に残り2つのカラムへの, 同期間のリンクを生成する
どのように実装したか?
サービスクラスとしてGenerateReport::Reportクラス, さらにReportクラスを継承するWeeklyReport, MonthlyReportクラスを作成した。
コントローラでparamsを解析してWeekyかMonthlyで条件分岐をして、それぞれに処理を移した。
それによって、コントローラの肥大化を抑えた。
- Reportクラスの主な処理
- リクエストURIの
:period
セグメントの文字列から始点, 終点の日付をセットする - それらの日付とカラムから各日付のカラムの値を取り出す
- 前週、次週へのURI文字列を生成する
- 同期間の別カラムへのURI文字列を生成する
- リクエストURIの
参考にしたもの
SimpleCalenderというgemのコードをGithubで観察した。
「Reportクラスを継承して、Weekly, Monthlyでクラスを継承する」というアイデアはこのgemからトレースしてみた。
このGemはRailsの深いところのメソッドをたくさん使っていて、理解できないところは多かった。
コードを観察したことで、Railsの仕組みを理解したい!みたいなモチベーションが生まれた。
Ruby
Rails
2019年10月11日(金)
4.5時間