前提・実現したいこと
レコード数が0の月を「0」として取得したいです。
Railsでイベント閲覧アプリを作成していて、chart.jsを使用してグラフを表示しようとしています。
横軸を年月、縦軸をレコード数としていますが、レコード数が「0」の月はグラフで表示できません。詰めてグラフが生成されます。
発生している問題・エラーメッセージ
dayカラムに7月のデータがある状態では正常にグラフが生成されます。
テーブルの画像↓
しかし、7月にデータがない状態(レコードへ登録がない月がある状態)ではグラフの生成がうまくいきません。
テーブルの画像↓
グラフの画像↓
該当のソースコード
グラフへデータへ渡すためのcontroller.rbの記述↓
Ruby
1start_day = Date.today-183 2end_day = Date.today 3gon.monthly = (start_day..end_day).select {|day| day.day == 1} 4gon.monthly.each_with_index do |month, i| 5 newmonth = month.strftime("%Y年%m月") 6 gon.monthly[i] = newmonth 7end 8sum = 0 9array = Like.where(user_id: current_user.id).where(day: start_day..end_day).group('MONTH(day)').count 10gon.data = array.values # この段階でイベントへ行っていない月は0で配列に加えておきたい 11binding.pry 12gon.linedata = [] 13gon.data.each do |data| 14 sum += data 15 gon.linedata << sum 16end
グラフを表示するためのcoffeeへの記述↓
coffee
1window.draw_graph = -> 2 ctx = document.getElementById("myChart").getContext('2d') 3 barNum = 6 4 labels = new Array(barNum) 5 bgColors = new Array(barNum) 6 bdColors = new Array(barNum) 7 for i in [0...barNum] 8 bgColors[i] = 'rgba(75, 192, 192, 0.2)' 9 bdColors[i] = 'rgba(75, 192, 192, 1)' 10 myChart = new Chart(ctx, { 11 type: 'bar', 12 data: { 13 labels: gon.monthly 14 datasets: [{ 15 label: 'イベントの数', 16 data: gon.data, 17 backgroundColor: bgColors, 18 borderColor: bdColors, 19 borderWidth: 1 20 }, { 21 label: '行ったイベントの総数', 22 data: gon.linedata, 23 type: 'line' 24 }] 25 }, 26 options: { 27 scales: { 28 yAxes: [{ 29 ticks: { 30 beginAtZero:true 31 } 32 }] 33 } 34 } 35 })
テーブルへデータが保存されるフォームは以下の通りです。
ruby
1<%= button_to '行った', "", class: "went-btn js-modal-open" %> 2 <div class="modal js-modal"> 3 <div class="modal__bg js-modal-close"></div> 4 <div class="modal__content"> 5 <%= form_for @like, url: event_likes_path(@event) do |f| %> 6 <%= f.date_field :day, min: @event.start_on, max: @event.end_on, value: @event.start_on.strftime("%Y-%m-%d") %>に 7 <%= f.submit "行った"%> 8 <% end %> 9 </div> 10 </div>
試したこと
Ruby へのコメントアウトへ記載しているように、イベントへ行ったことがない月に対して配列に「0」を加えたい。
しかし、方法がどうしても見つけられないのでご教授いただければと思います。
違う方法が良ければそちらをご紹介していただきたいです。
補足情報(FW/ツールのバージョンなど)
Rails 5.2.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/11/17 03:29