如何在不使用 group_by 的情况下 return chartkick 中的所有数字
How to return all numbers in chartkick without using group_by
我是 ruby 的新手,玩过 ChartKick,在图表上看不到任何线条。我允许用户输入数字 1-10,我想在 line_chart 中显示所有这些值。我在循环中返回下面的所有值,我也想要图表中的这些数字。
我知道我现在正在获取数据,因为下面列出的每个值的颜色都显示在右侧。我已附上屏幕截图以提供帮助。如果能得到任何帮助,我将不胜感激。提前致谢!
这是我的看法
<div class="col-xs-6">
<h3>Numbers Added</h3>
<%= line_chart @numbers, {height: "400px", library: {hAxis: {title: "All Entered Numbers"}, vAxis: {title: "Numbers", viewWindow: {min: 0, max:10}}}} %>
</div>
</div>
<table>
<tr>
<th>All Numbers</th>
</tr>
<% @numbers.each do |number| %>
<tr>
<td><%= number.value %></td>
<td><%= link_to 'Show', number_path(number) %></td>
<td><%= link_to 'Edit', edit_number_path(number) %></td>
<td><%= link_to 'Destroy', number_path(number),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
<%= link_to 'Add new number', new_number_path %>
</table>
这是我的控制器
class NumbersController < ApplicationController
def index
@numbers = Number.all
end
屏幕截图:
折线图基本上就是一个 X-Y 坐标系。
要绘制点,您需要 X 和 Y 坐标。
但是你在这样的数组中只给出了 1 个坐标:
[1,21,44,12,55,12,9,0,78,12]
你真正需要的是这样的哈希:
{
0 => 1,
1 => 21,
2 => 44,
...
}
要实现,您可以使用以下代码:
<%= line_chart Hash[(0...@numbers.size).zip @numbers.map(&:values)],
{height: "400px", library: {hAxis: {title: "All Entered Numbers"},
vAxis: {title: "Numbers", viewWindow: {min: 0, max:10}}}} %>
这一次可以做很多事情。
首先,它创建一个数组,其中包含从 0 到数据的计数(不包括计数)的数字:
(0...@numbers.size) =>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
下一步是从你的数字中收集所有值,@number 实际上是一个 ActiveRecord 对象数组,但你只想拥有这些值:
@numbers.map(&:values)
此函数调用@numbers 中每个对象的值,并用结果创建一个数组。现在我们有两个数组:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 21, 44, 12, 55, 12, 9, 0, 78, 12]
.zip 将它们组合在一起,将每一个都放入一个新数组中,现在我们有以下内容:
[
[0, 1], [1, 21], [2, 44], [3, 12], [4, 55],
[5, 12], [6, 9], [7, 0], [8, 78], [9, 12]
]
不,我们可以用 Hash[...] 将其转换为哈希,瞧,我们有这个:
{
0 => 1,
1 => 21,
2 => 44,
...
}
我是 ruby 的新手,玩过 ChartKick,在图表上看不到任何线条。我允许用户输入数字 1-10,我想在 line_chart 中显示所有这些值。我在循环中返回下面的所有值,我也想要图表中的这些数字。
我知道我现在正在获取数据,因为下面列出的每个值的颜色都显示在右侧。我已附上屏幕截图以提供帮助。如果能得到任何帮助,我将不胜感激。提前致谢!
这是我的看法
<div class="col-xs-6">
<h3>Numbers Added</h3>
<%= line_chart @numbers, {height: "400px", library: {hAxis: {title: "All Entered Numbers"}, vAxis: {title: "Numbers", viewWindow: {min: 0, max:10}}}} %>
</div>
</div>
<table>
<tr>
<th>All Numbers</th>
</tr>
<% @numbers.each do |number| %>
<tr>
<td><%= number.value %></td>
<td><%= link_to 'Show', number_path(number) %></td>
<td><%= link_to 'Edit', edit_number_path(number) %></td>
<td><%= link_to 'Destroy', number_path(number),
method: :delete,
data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
<%= link_to 'Add new number', new_number_path %>
</table>
这是我的控制器
class NumbersController < ApplicationController
def index
@numbers = Number.all
end
屏幕截图:
折线图基本上就是一个 X-Y 坐标系。
要绘制点,您需要 X 和 Y 坐标。 但是你在这样的数组中只给出了 1 个坐标:
[1,21,44,12,55,12,9,0,78,12]
你真正需要的是这样的哈希:
{
0 => 1,
1 => 21,
2 => 44,
...
}
要实现,您可以使用以下代码:
<%= line_chart Hash[(0...@numbers.size).zip @numbers.map(&:values)],
{height: "400px", library: {hAxis: {title: "All Entered Numbers"},
vAxis: {title: "Numbers", viewWindow: {min: 0, max:10}}}} %>
这一次可以做很多事情。 首先,它创建一个数组,其中包含从 0 到数据的计数(不包括计数)的数字:
(0...@numbers.size) =>
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
下一步是从你的数字中收集所有值,@number 实际上是一个 ActiveRecord 对象数组,但你只想拥有这些值:
@numbers.map(&:values)
此函数调用@numbers 中每个对象的值,并用结果创建一个数组。现在我们有两个数组:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 21, 44, 12, 55, 12, 9, 0, 78, 12]
.zip 将它们组合在一起,将每一个都放入一个新数组中,现在我们有以下内容:
[
[0, 1], [1, 21], [2, 44], [3, 12], [4, 55],
[5, 12], [6, 9], [7, 0], [8, 78], [9, 12]
]
不,我们可以用 Hash[...] 将其转换为哈希,瞧,我们有这个:
{
0 => 1,
1 => 21,
2 => 44,
...
}