2017-01-05 3 views
0

Я довольно новичок в рубине и играю с ChartKick и не вижу никаких линий на графике. Я разрешаю пользователям вводить цифры 1-10, и я хочу отображать все эти значения в строке line_chart. Я возвращаю все значения ниже в цикле, и я тоже хочу эти числа в диаграмме.Как вернуть все числа в chartkick без использования group_by

Я знаю, что получаю данные сейчас, потому что цвета отображаются справа для каждого значения, указанного ниже. Я приложил скриншот, чтобы помочь. Буду признателен за любую помощь, которую я могу получить. Заранее спасибо!

Вот мой взгляд

<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 

Снимок экрана:

screen shot

+0

я не буду ничего chartkick, но вы пробовали это: <% = line_chart @ numbers.map (&: значения), {. ..? –

+0

@DoktorOSwaldo, это не сработало. Граф пуст, и цвета больше не отображаются справа. Он также говорит о неопределенности для этой оси. – rscottbradshaw

ответ

0

линия диаграммы в основном только X-Y системы координат.

X & Y Axis

рисовать Точку вам нужен X и Y координат. Но вы дали только 1 координату в массиве, как это:

[1,21,44,12,55,12,9,0,78,12] 

То, что вы на самом деле нужно, это Hash так:

{ 
    0 => 1, 
    1 => 21, 
    2 => 44, 
    ... 
} 

Чтобы achiev, что вы можете использовать следующий код:

<%= line_chart Hash[([email protected]).zip @numbers.map(&:values)], 
{height: "400px", library: {hAxis: {title: "All Entered Numbers"}, 
vAxis: {title: "Numbers", viewWindow: {min: 0, max:10}}}} %> 

Это делает несколько вещей одновременно. Сначала он создает массив с числами от 0 до подсчета (EXLUSIVE счетчик) данных:

([email protected]) => 
[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, 
    ... 
} 
+0

Ты потрясающий! Это прекрасно работает. Большое вам спасибо за помощь! – rscottbradshaw

+0

Вы понимаете, в чем была ваша проблема, или я должен объяснить? –

+0

Это было бы очень полезно. Я не уверен, как работает zip. – rscottbradshaw