🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3704閲覧

chartkickを使用して複数の折れ線グラフを表示する

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/12/23 09:57

前提・実現したいこと

chartkickを使用して複数の折れ線グラフを表示する

発生している問題・エラーメッセージ

カラム別にそれそれを表示させたいが、現状は、DBのレコードの数をグラフにしている。 例)2020-12-20の日付のレコードが3つDBに存在していれば、3 として認識している

該当のソースコード

ruby

1class ChartsController < ApplicationController 2 before_action :authenticate_user! 3 before_action :configure_permitted_parameters, if: :devise_controller? 4 def new 5 @chart = Chart.new 6 end 7 8 def index 9 @chart = Chart.all 10 end 11 12 def create 13 @chart = Chart.new(chart_params) 14 if @chart.save 15 redirect_to charts_path 16 else 17 render :new 18 end 19 end 20 21 private 22 def chart_params 23 params.require(:chart).permit(:body_weight, :bench_press, :deadlift, :squat).merge(user_id: current_user.id) 24 end 25end 26

ruby

1<div class="main"> 2 <div class="graph"> 3 4 <%# <%この記述だとレコードの数を数えてしまう%> %> 5 <%= line_chart Chart.group_by_day(:created_at).count %> 6 <%= line_chart @chart.group_by_day(:created_at),xtitle: "月/日",ytitle: "重量"%> 7 <%# <%この記述だとレコードの数を数えてしまう%> %> 8 9 </div> 10 11</div> 12 13<%# <%公式の書式%> %> 14<%= line_chart @chart.map { |goal| 15 {name: goal.name, data: goal.feats.group_by_week(:created_at).count} 16} %> 17<%# <%公式の書式%> %> 18

試したこと

DBにはきちんと保存できている。
DBの取得を @body_weight = Chart.select(:body_weight)などカラム別に定義したが
うまく表示できなかった。
DBの取得、ビューファイルの記述方法、ご教授いただければ幸いです。

補足情報(FW/ツールのバージョンなど)

公式サイト
https://chartkick.com/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fumu7

2020/12/23 10:13

「カラム別に定義したがうまく表示できなかった」というのは、どういう現象が起きたことを意味していますか?
退会済みユーザー

退会済みユーザー

2020/12/23 10:34 編集

t.integer :body_weight, null: false t.integer :bench_press, null: false t.integer :deadlift, null: false t.integer :squat, null: false グラフに表示させたいのが上記の4つになります。 コントローラー @body_weight = Chart.select(:body_weight) ビュー <%= line_chart Chart.group_by_day(:created_at).count %> で参照すると表示はされるが、カラムの値通りではなく、どのデータを参照しているかわからない状態です。
guest

回答1

0

ベストアンサー

「公式の書式」を見ると、以下のようなデータが必要です。

ruby

1# date が x、 value が y 2[ 3 { name: "body weight", data: {date => value, date => value} }, 4 { name: "bench press", data: {date => value, date => value} }, 5 { name: "deadlift", data: {date => value, date => value} }, 6 { name: "squat", data: {date => value, date => value} }, 7]

.group_by_day(date).sum(カラム) は
{day => 同じdayのカラムの合計値, day => 同じdayのカラムの合計値}
というのを返します。なので次のように書けます。

ruby

1weight = Chart.group_by_day(:created_at).sum(:body_weight) 2bench_press = Chart.group_by_day(:created_at).sum(:bench_press) 3deadlift = Chart.group_by_day(:created_at).sum(:dead_lift) 4squat = Chart.group_by_day(:created_at).sum(:squat) 5 6@chart = [ 7 { name: "body weight", data: weight }, 8 { name: "bench press", data: bench_press }, 9 { name: "deadlift", data: deadlift }, 10 { name: "squat", data: squat }, 11] 12

erb

1<%= line_chart @chart %>

過去の回答も参考にしてください
chartkickの折れ線グラフに入力した数字を表示させたい
chart.kickで、値をユーザーごとに管理したい。

追記

def index # 合計するデータが用意できなかったので 無意味に id を合計してます users = User.group_by_day(:created_at).sum(:id) tweets = Tweet.group_by_day(:created_at).sum(:id) @chart = [ { name: "users", data: users }, { name: "tweets", data: tweets }, ] end

上記から描画されるチャート
チャート

投稿2020/12/23 16:07

編集2020/12/25 08:56
neko_daisuki

総合スコア2090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/12/23 17:34

ご回答ありがとうございます。 <%= line_chart Chart.group_by_day(:created_at).count %> を <%= line_chart Chart.group_by_day(:created_at).sum(:squat) %> に変えることで、日毎に表示することができました。 ありがとうございます。 しかしながら、複数のグラフを同時に表示できていない状況です。 <%= line_chart @chart.map { |goal| {name: goal.name, data: goal.feats.group_by_week(:created_at).count} } %> を使用して表示できればと思っております。 ご教授いただければ幸いです。
neko_daisuki

2020/12/25 08:50

複数のグラフを同時に表示する例を書いたつもりです。
退会済みユーザー

退会済みユーザー

2020/12/25 09:31

ご回答ありがとうございます。ご丁寧にご教授ありがとうございます。 無事複数のグラフを作図することができました。 最高のクリスマスプレゼントになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問