2016-05-21 6 views
2

Ich habe Daten, die täglich vom Benutzer über ein Formular hinzugefügt werden. Einige dieser Felder notieren Temperatur:: ambcur,: ambmin,: ambmax ​​usw. Dies ist alles Teil eines Trays, der ein Datenprotokoll hatAnzeigen von Daten mit Chartkick

Ich benutze chartkick und seine große, aber ich bin mir nicht sicher, wie Sie die Daten über Zeit.

Ich versuche, ein Multiserien-Liniendiagramm zu erstellen.

<%= line_chart [ 
       {name: "Series A", data: @tray.datalogs.ambcur}, 
       {name: "Series B", data: @tray.datalogs.ambmin} 
      ] %> 

Auch ein singuläres Liniendiagramm funktioniert nicht.

<%= line_chart @tray.datalogs.group(:ambcur).count %> 

Kann mir jemand helfen, mich in die richtige Richtung zu lenken? Danke :)

+0

Sie haben ** groupdate ** gem installiert? –

+0

@RareFever nein Ich habe es auskommentiert, weil es nicht mit meiner Dev-Datenbank funktioniert, aber funktioniert in pg. Also die Empfehlung war, Dataslices zu verwenden. – mGarsteck

+0

können Sie das Beispiel "Timeline" rendern? dataslices ist ein Juwel? Wenn ja, hinterlassen Sie einen Link. –

Antwort

4

Das Problem mit Ihrem Code ist, dass Sie nicht das korrekte Datenformat an die line_chart übergeben. ein Liniendiagramm die Daten zeichnen im Format eines Hash sein muss, wie folgt aus:

<%= line_chart {"2016-05-21 23:50:40 UTC"=>20, "2016-05-21 23:50:57 TC"=>23} %> 

{ "2016.05.21 23.50.40 UTC" => 20, „2016.05.21 23.50.57 UTC "=> 23}

In vorherigem Beispiel Sie Daten (Strings) als Schlüssel zu dem Hash und die Werte (Integer) sehen 20 und 23 In Ihrem Fall, dass Sie einen Hash benötigen wo die Schlüssel sind die Daten und Werte der Hash sind die max, min oder aktuelle Temperatur. { "Datum_1" => Nummer "Datum_2" => Nummer, ...}

Zu meinem Code zu testen Ich habe ein Modell Temperatur genannt. Hier ist die Tabelle:

create_table "temperatures", force: :cascade do |t| 
    t.integer "max",  limit: 4 
    t.integer "min",  limit: 4 
    t.integer "current", limit: 4 
    t.datetime "created_at",   null: false 
    t.datetime "updated_at",   null: false 
    end 

Aus meiner Sicht ich das genannt:

<%= line_chart [ 
{name: "Series A", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.max; res }}, 
{name: "Series B", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.current; res }}, 
{name: "Series C", data: Temperature.all.inject({}) {|res, v| res[v[:created_at]] = v.min; res }} 
      ] %> 

Und ich habe das Grundstück mit 3 Linien zeigen, max, min und die aktuelle Temperatur im Laufe der Zeit.

enter image description here

verwendete ich inject eine Hash zu schaffen, wo Schlüssel sind Daten und Werte sind die Attribute [max, min, Strom] Modell Temeperature. Für weitere Informationen zu injizieren Methode, lesen Sie .

In Ihrem Fall sollten Sie dies versuchen:

<%= line_chart [ 
{name: "Series A", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambmax; res }}, 
{name: "Series B", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambcur; res }}, 
{name: "Series C", data: @tray.datalogs.inject({}) {|res, v| res[v[:created_at]] = v.ambmin; res }} 
       ] %> 
+0

Danke, krank geben Sie das eine Chance. – mGarsteck

+1

Ja, das hat tatsächlich funktioniert. Vielen Dank mit der Hilfe !!!! – mGarsteck