【问题标题】:How to use json in d3.js Rails application如何在 d3.js Rails 应用程序中使用 json
【发布时间】:2015-05-24 14:32:58
【问题描述】:

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

虽然我想在 d3.js 中显示它,但我能够成功地做到这一点并在警报中显示结果

我有一个名为 users (name:string,value:integer) 的数据库 我想只将值传递给 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 和 value 的哈希。

【问题讨论】:

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


    【解决方案1】:

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

     class GraphController < ApplicationController
       def index
       end
    
       def data
         @users = User.all
         gon.users = @users.value.as_json
         @users = User.value
       end   
    end
    

    尝试在控制器中执行此操作更好还是通过整个 table 转换成 json 然后配置 d3 来绘制我想要的部分?

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

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

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

    【讨论】:

    • 好的,所以假设我放弃 gon 然后让我的控制器给我来自用户表的值列,我是否只需在 ajax 中引用 url:'graph/data' 以从我的图表中获取数据控制器?我会使用您上面提供的代码来定义 json 吗?有点迷茫……
    • 是的,类似的。您还需要设置控制器以响应 JSON。谷歌rails JSON api。有很多教程详细说明了如何做到这一点。
    猜你喜欢
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多