Chartkick 在 Rails 上使用 Ruby 渲染具有多个系列的 line_chart
Chartkick with Ruby on Rails to render a line_chart with multiple series
我有一个模型级别,每次定义时都会记录一次来自 8 个不同水箱的级别值。因此,每个级别都有一个 :box_id
、一个 :level_value
和一个 :created_at
时间戳。我想在 line_chart 中绘制这些值,其中 y 轴具有所有框的 :created_at
值,x 轴具有水平。将有 8 个系列的级别值随时间注册。
我正在使用 Chartkick gem 但我没有得到正确的图表。
我的控制器是这样的:
def chart
@levels = Level.all
end
我正在尝试这样做:
<%= line_chart @levels.group(:box_id).group(:created_at).count %>
但我得到这个:
好像是count()方法的问题,但是我没有找到没有这个方法的方法。
我通过将名称和日期传递给 line_chart 找到了答案。
这是在控制器上的动作:
def get_all_tanks_graph
@hash = {}
@array = Array.new
@levels = Level.get_all_tanks_levels
@levels.each do |l|
l.each do |i|
@hash[i.created_at] = i.level
end
@array << @hash
@hash = Hash.new
end
render json: @array.each_with_index.map {
|a, index| {
name: "Caixa #{index + 1}", data: a
}
}
end
这是调用动作的助手。
line_chart get_all_tanks_graph_path
我有一个模型级别,每次定义时都会记录一次来自 8 个不同水箱的级别值。因此,每个级别都有一个 :box_id
、一个 :level_value
和一个 :created_at
时间戳。我想在 line_chart 中绘制这些值,其中 y 轴具有所有框的 :created_at
值,x 轴具有水平。将有 8 个系列的级别值随时间注册。
我正在使用 Chartkick gem 但我没有得到正确的图表。 我的控制器是这样的:
def chart
@levels = Level.all
end
我正在尝试这样做:
<%= line_chart @levels.group(:box_id).group(:created_at).count %>
但我得到这个:
好像是count()方法的问题,但是我没有找到没有这个方法的方法。
我通过将名称和日期传递给 line_chart 找到了答案。
这是在控制器上的动作:
def get_all_tanks_graph
@hash = {}
@array = Array.new
@levels = Level.get_all_tanks_levels
@levels.each do |l|
l.each do |i|
@hash[i.created_at] = i.level
end
@array << @hash
@hash = Hash.new
end
render json: @array.each_with_index.map {
|a, index| {
name: "Caixa #{index + 1}", data: a
}
}
end
这是调用动作的助手。
line_chart get_all_tanks_graph_path