如何在d3.js Rails应用程序

时间:2015-05-24 14:32:59

标签: javascript ruby-on-rails json d3.js

我正在使用gem gon从我的Rails数据库创建json。

我能够成功完成此操作并在警报中显示结果,尽管我想在d3.js中显示它

我有一个名为users的数据库(名称:字符串,值:整数) 我想将这些值传递给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

我不太确定如何绘制我想要的值

更新

所以在推荐的时候我已经放弃了gon并且恢复了以旧式方式创建json然后尝试从ajax调用中调用它。 因此控制器看起来像这样:

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

我使用ajax对数据进行完全相同的调用,如我正在尝试遵循的here

教程中所述

然而,这并没有向我展示我想要的条形图,并以json格式返回id和值的哈希值。

1 个答案:

答案 0 :(得分:1)

您实际上并未从数据库加载任何用户:

 class GraphController < ApplicationController
   def index
   end

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

尝试在控制器中执行此操作或传递整体是否更好   表成json,然后配置d3来绘制我想要的部分?

这是一个意见问题,但我想说最好是创建一个经过深思熟虑的API,以适合多种用途的方式将您的资源公开为JSON。

我也会抛弃gon并使用普通的旧JSON和Ajax。通过脚本标签从服务器向javascript注入数据是一种反模式。它依赖于全局变量,创建时序问题并使您的控制器与页面上的javascripts组件的行为相关联。

采用“吃你自己的狗食”方法并使用自己的API的应用程序往往更好地执行并且更加模块化。