(Rails/Chart.js)前後の期間へのリンク生成 - 体調グラフ機能


アプリ制作

実現したいこと

体調グラフ機能

  • クエリパラメータでカラム・期間を指定してグラフを描画する

  • 異なるカラム・前後の期間へのリンクを生成する。

課題

以下の2つのメソッドを定義する必要があると考えた。

  • reportインスタンスdate_begin, date_end, periodを受け取って、前後の期間へのクエリパラメータを返すメソッド
  • date_begin, date_end, colmunを受け取って同時期の別カラムへのクエリパラメータを返すメソッド

ここまで考えたところで、メンターに質問して、並行して自分で進める。

実装 前後の期間へのリンク生成

  • URIでperiod=monthと指定しても、@report.period = :weekになる
    • periodとdate_begin, date_endの差を検証していない=> 後に回そう
    • StrongParameterでperiodパラメータがpermitされていなかった。
  • 以下のように実装し、一応動いた。
# app/helpers/statistics_helper.rb
def previous_period_generator(report)
    date_begin_and_end = []
    if report.period == :month
      date_begin = report.date_begin << 1
      date_end = report.date_end << 1
    elsif report.period == :week
      date_begin = report.date_begin - 1.week
      date_end = report.date_end - 1.week
    else
      date_begin = report.date_begin - 1.week
      date_end = report.date_end - 1.week
    end
    date_begin_and_end << date_begin
    date_begin_and_end << date_end
    date_begin_and_end
end

def next_period_generator(report)
    date_begin_and_end = []
    if report.period == :month
      date_begin = report.date_begin << -1
      date_end = report.date_end << -1
    elsif report.period == :week
      date_begin = report.date_begin + 1.week
      date_end = report.date_end + 1.week
    else
      date_begin = report.date_begin + 1.week
      date_end = report.date_end + 1.week
    end
    date_begin_and_end << date_begin
    date_begin_and_end << date_end
    date_begin_and_end
  end
# app/views/statistics/report.html.erb
<h3><%= @report.column %></h3>

<% before = previous_period_generator(@report) %>
<%= link_to "前", statistics_path(column: @report.column, date_begin: before[0], date_end: before[1]) %>
<p><%= @report.date_begin %>~<%= @report.date_end %></p>
<% after = next_period_generator(@report) %>
<%= link_to "次", statistics_path(column: @report.column, date_begin: after[0], date_end: after[1]) %>

Image from Gyazo

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

bashの設定

チェリー本の学習記録として写経したコードと主な実行結果をファイルに残している。

実行結果をターミナルからコピペする手間が無駄なので、以下の設定をした。

思ったこと

  • エラーもファイルに出力できるようにしたい
  • テストをかけるようにならないと、動作が正確か自信が持てない。手動のチェックが面倒
  • コードが長い...もっと短くかけるようになりたい...