2015-05-24 35 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