2014-06-21 48 views
2

我正在學習ROR(目前有5個多月),並且正試圖從Postgres數據庫中將數據導入到Highcharts。 Postgres表的列有:id,:name和:pc1 - 這是一年百分比變化 - (等等)。數據庫中有五個時間序列[:id]。在ROR中以JSON格式從Postgres獲取數據到Highcharts javascript

這裏的DB模式:

create_table "series", force: true do |t| 
    t.string "acronym" 
    t.string "name" 
    t.string "current" 
    t.string "previous" 
    t.string "pc1" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

下面是該系列控制器的一部分:

class SeriesController < ApplicationController 
before_action :set_series, only: [:show, :edit, :update, :destroy] 

# GET /series 
# GET /series.json 
def index 
    @series = Series.all 
end 

def percent 
    @series.each do |series| 
    series.name 
    series.pc1 
    end 
    render :json 
end 

我定義一個方法 - 「百分比」 - 因爲我要創建幾個不同的圖表,例如,一個用於每年百分比變化(這一個)以及先前與當前的變化。

下面是與Highcharts腳本的觀點:

更多或以下Highcharts'指令(這裏:http://www.highcharts.com/docs/working-with-data/preprocessing-data-from-a-database)少,我把‘數據’請求了Highcharts功能。原始的Highcharts演示代碼 - 使用嵌入式「硬編碼」數組 - 在這裏:http://www.highcharts.com/docs/getting-started/your-first-chart我假設我應該刪除系列,如果我在調用該函數之前將它聲明爲變量。我在示例中忽略了php,因爲我應該從控制器渲染json系列。

<div> 
<script> 
    var chart = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'container' 
    }, 
    series: [{ 

// I pulled local host out of here because Stackoverflow doesn't like it 

     var url = ""; 
     $.getJSON(url, function(resp) { 
     options.series[0].name = name; 
     options.series[0].pc1 = pc1; 
     var chart = new Highcharts.Chart(options); 
     }); 

     pointStart: 0, 
     pointInterval 
    }] 
}); 

    $(function() { 

     $('#container').highcharts({ 
      chart: { 
       type: 'bar' 
      }, 
      title: { 
       text: 'Fruit Consumption' 
      }, 
      xAxis: { 
       categories: ['Apples', 'Bananas', 'Oranges'] 
      }, 
      yAxis: { 
       title: { 
        text: 'Fruit eaten' 
       } 
      },   
     }); 

    }); 
    </script> 
</div> 

這裏的模型:

class Series < ActiveRecord::Base 
    has_many :series 
end 

我想我有多個問題:

  1. 我是不是正確的控制器渲染JSON?
  2. 我應該在腳本還是文件中調用url(因爲我使用的是localhost服務器)?
  3. 我懷疑還有其他人,例如,百分比方法應該在控制器的before操作中嗎?

控制檯中的錯誤是這一行:var url =「http://localhost:3000/series」;我已經嘗試了許多變體,包括/ series和文件路徑。

我的環境已設置(使用Apple Mac和Mavericks)。我使用運行rails服務器的Terminal應用程序,Postgres運行在單獨的選項卡,Sublime Text版本2和Chrome中。

回答

0

1.我是否正確地在控制器中呈現json?

我不這麼認爲。我也會發送一個狀態,你需要告訴它是什麼。 所以我會去這樣的:

def percent 
    @series.each do |series| 
    series.name 
    series.pc1 
    end 
    render status: 200, json: @series.as_json 
end 

2.我應該調用腳本URL或文件(因爲我使用本地主機服務器)?

一個網址,總是一個網址。您將無法訪問文件。而你的網址似乎是正確的。

3.我懷疑還有其他人,例如,百分比法應該在控制器的before操作中嗎?

這取決於你在做什麼。如果您想通過調用/series路由來響應生成的json百分比方法,則需要在索引方法中調用百分比。如果你想要一個明確的電話/percent你只需要將其添加到路線,你很好去。順便說一句,你確實改變了這個路線文件,對吧? 您應該至少有一個可用的串行控制器,或者如果你想要完整的CRUD,資源應該在那裏。 另外,我認爲你應該遵守以單數形式表示模型名稱的慣例,而你的has_many:系列對我來說沒有意義。你想在那裏做什麼? 如果一個系列has_may系列,那麼你應該有一個serie_id在模型中,也是一個屬於。

希望這有助於某種方式。

+0

Afonso,謝謝你的幫助! 1.修改渲染格式正確地格式化數據並將其發送到系列#索引操作。 (我的路線是正確的。)輸出是一個數組。 2.要從Postgres數據庫中檢索數據,將它交給Highcharts並渲染圖表,請執行以下操作: – user3763682

+0

1.修改渲染格式,正確格式化數據並將其發送到系列#索引操作。 (我的路線是正確的。)輸出是一個數組。 A.控制器不應該有一個渲染調用;相反 - 在我的情況 - 只是@series = Series.all; B,jQuery的Highcharts預處理需要放在app/assets /(controller name)/ javascript-file中。 C.Highcharts html進入你的視野。您還需要添加Highcharts的JavaScript文件(或將其放在部分內容中)。 我的錯誤是假設我需要控制器操作來檢索數據。 – user3763682

相關問題