railsのcontrollerからgemのgonで変数を渡し
chart.jsでグラフを作成したので記録に残します。
##chart.js読み込み
application.htmlに貼り付け
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"</script> ← 追加
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
</head>
show.html
<canvas id="myChart" width="150" height="80"></canvas> ←サイズ大きかったので変更してます
jsファイルにグラフを記入
<script>
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: ["赤", "青", "黄色", "緑", "紫", "橙"],
datasets: [{
label: '得票数',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
</script>
こちらは
日本語ドキュメントを引用させていただきました!
使用方法に載ってました。
ここでshowページに棒グラフ作られたので次はrailsのcontrollerからjavascriptに変数を渡していきます。
##Gonインストール
gem 'gon', '~> 6.2.0'
bundle install
application.html
<%= include_gon %>
...省略
</head>
先ほどの読み込みの上に貼りました。
@your_int = 123
@your_array = [1,2]
@your_hash = {'a' => 1, 'b' => 2}
gon.your_int = @your_int
gon.your_other_int = 345 + gon.your_int
gon.your_array = @your_array
gon.your_array << gon.your_int
gon.your_hash = @your_hash
gon.all_variables # > {:your_int => 123, :your_other_int => 468, :your_array => [1, 2, 123], :your_hash => {'a' => 1, 'b' => 2}}
gon.your_array # > [1, 2, 123]
引用:https://github.com/gazay/gon
ハッシュも配列も入れることができるそうです。
私はpetの体重をグラフにして行きたかったので、
@pet = Pet.find(params[:pet_id])
gon.weight = Condition.where(pet_id: @pet.id).pluck(:weight)
gon.recorded_date = Condition.where(pet_id: @pet.id).pluck(:recorded_date)
Conditionテーブルのweightカラムでpet_idで絞り、gon.weightに代入しました。(X軸)
Conditionテーブルのrecorded_dateは日にちです。(Y軸)
参考にさせていただきました。
ありがとうございます。
これを先ほどのjsファイルに入れます。
var ctx = document.getElementById("myChart").getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: gon.recorded_date, <= 変更
datasets: [{
label: '体重', <= 変更
data: gon.weight, <= 変更
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
],
borderColor: [
'rgba(255,99,132,1)',
],
borderWidth: 1
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
折れ線グラフが良かったのでtype:'line'にしましたが
ドキュメントにたくさんのtypeが載っていました。
以上です。
まだまだできそうなことがたくさんあるので触って行きたいです