我正在使用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和值的哈希值。
答案 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的应用程序往往更好地执行并且更加模块化。