前提・実現したいこと
初学者です。railsにて、MySQLのデータをグラフに反映させたいです。
chart.jsを使いグラフの表示までは辿り着いたのですが、意図した挙動にならないため困っております。
お恥ずかしい限りではございますがお力添えを頂きたく投稿させて頂きました。
何卒、よろしくお願いします!
実現したい実装
①1週間毎のグラフを表示する
②MySQLに保存されている日付とグラフを連動したい
■発生している問題・エラーメッセージ
MySQLに保存されているデータが日時と関係無く反映されている
・MySQLデータには「4月15日/4月16日/4月27日/4月28日」分の入力データが格納されている
→グラフには、4月12日(月)〜4月16日(金)の1週間表示で、15日と16日のデータのみグラフに反映したい。
→現状は、グラフに「15日/16日/27日/28日」のデータが反映されている状態
■グラフの状態
https://gyazo.com/71eea3968b0e9ec5381c76d7f5b78b97
■MySQLデータ状況
https://gyazo.com/f9718526632e22f3d3dd8b171c6e9d62
該当のソースコード
Ruby
1□ビュー【record/index.html.erb】□ 2<div class="main-record"> 3 <div class="record-post"> 4 <h2><%= link_to "新規で記録する", new_record_path ,class: :font %></h2><br /> 5 6 <h2><%= "#{current_user.nickname}さんの練習記録" %></h2> 7 8 <div class="record_bar"> 9 <canvas id="myBarChart" width="1000" height="500"></canvas> 10 <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script> 11 <script> 12 var ctx = document.getElementById("myBarChart"); 13 var myBarChart = new Chart(ctx, { 14 type: 'bar', 15 data: { 16 labels: ['4月1日', '4月2日', '4月3日', '4月4日', '4月5日', '4月6日', '4月7日'], 17 datasets: [ 18 { 19 label: '練習時間', 20 data: gon.practice_time, 21 backgroundColor: "rgb(175,238,238)" 22 } 23 ] 24 }, 25 options: { 26 title: { 27 display: true, 28 text: '練習時間' 29 }, 30 scales: { 31 scales: { 32 xAxes: [{ 33 type: 'time', 34 time: { 35 unit: 'day' 36 } 37 }] 38 }, 39 }, 40 } 41 }); 42 </script> 43 </div> 44</div>
Ruby
1□ コントローラー【records_controller.rb】□ 2class RecordsController < ApplicationController 3 def index 4 gon.created_at = Record.pluck(:created_at) 5 gon.practice_time = Record.pluck(:practice_time) 6 end 7 8 def new 9 @record = Record.new 10 end 11 12 def create 13 @record = Record.new(record_params) 14 if @record.save 15 redirect_to records_path 16 else 17 render :new 18 end 19 end 20 21 private 22 def record_params 23 params.require(:record).permit(:practice_time, :ball, :content, :created_at,check:[]).merge(user_id: current_user.id) 24 end 25end
Ruby
1□ルーティング(routes.rb)□ 2Rails.application.routes.draw do 3 devise_for :users, controllers: { registrations: 'users/registrations', sessions: 'users/sessions'} 4 root 'tops#index' 5 resources :records, only: [:index, :new, :create, :show] 6 resources :articles do 7 resources :comments, only: :create 8 end 9 resources :users, only: :show 10end
試したこと
①ビューに表示出来るかの確認(以下記述でデータの取得及びビューへの表示は出来ました)
→表示出来たデータをグラフに反映する方法が中々見つからない状況です。
「前提・実現したい事」に記述している挙動にするための知識が不足しているため、参考となる記事や記述があれば教えて欲しいです。
□ コントローラー【records_controller.rb】□ 〜省略〜 def index @record = Record.all 〜省略〜 end
Ruby
1□ビュー【record/index.html.erb】□ 2〜省略〜 3<% @record.each do |record| %> 4 <%= record.created_at %> 5 <%= record.practice_time %> 6<% end %> 7〜省略〜
補足情報(FW/ツールのバージョンなど)
・rails:6.0.0
・SequelPro:5.6.51
あなたの回答
tips
プレビュー