2015-05-24 64 views
0

我使用gem gon從我的Rails數據庫創建json。如何在d3.js Rails應用程序中使用json

我能夠成功地做到這一點,並顯示警告的結果,雖然我想表明它在d3.js

我有一個數據庫,稱爲用戶(名稱:字符串值:整數) 我只想將值傳遞給json,這樣就可以繪製圖表。

嘗試在控制器中執行此操作或者將整個表格傳遞到json然後配置d3來繪製我想要的部分的圖形會更好嗎?

試圖前者如下

class GraphController < ApplicationController 
    def index 
    end 

    def data 
    gon.users = @users.value.as_json 
    @users = User.value 
    end 
end 

給我的錯誤:

NoMethodError in GraphController#data 
    undefined method `value' for nil:NilClass 

,這凸顯了線

gon.users = @users.value.as_json 

我不是很清楚如何繪製的價值觀我想要

UPDATE

因此,建議我現在已經放棄了坤並恢復爲創建json舊式的方式,然後試圖從ajax調用它。 控制器,因此看起來是這樣的:

def data 
    render :json => User.select('value') 
    end 
end 

和我使用AJAX做完全一樣的調用數據,載於教程中,我試圖按照here

然而,這並不表明我吧我想要的圖形並返回json格式的id和值的散列。

回答

1

你沒有實際加載從數據庫中的任何用戶:

class GraphController < ApplicationController 
    def index 
    end 

    def data 
    @users = User.all 
    gon.users = @users.value.as_json 
    @users = User.value 
    end 
end 

Is it better to try to do this in the controller or to pass the whole table into json and then configure d3 to graph the parts I want?

這是見仁見智的問題,但我會說,這是最好創建一個深思熟慮的API,它暴露了你的資源作爲適合多種用途的JSON。

我也會溝gon並使用普通的舊JSON和Ajax。通過腳本標記從服務器向JavaScript注入數據是一種反模式。它依賴於全局變量,創建計時問題並使您的控制器與頁面上javascripts組件的行爲相結合。

採取「吃自己的狗糧」方法並使用自己的API的應用程序往往更好地執行並且更加模塊化。

+0

確定假設我溝gon然後讓我的控制器給我從用戶表中的值列我會只參考url:'圖形/數據',在Ajax從我的圖形控制器獲取數據?我會用上面提供的代碼來定義json嗎?有點困惑...... –

+0

就是這樣的。您還需要設置控制器以響應JSON。 Google for'rails JSON API「。有很多教程詳細說明如何實現這一點。 – max