Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从数据库查询rails创建JSON_Javascript_Ruby On Rails_Json_D3.js - Fatal编程技术网

Javascript 从数据库查询rails创建JSON

Javascript 从数据库查询rails创建JSON,javascript,ruby-on-rails,json,d3.js,Javascript,Ruby On Rails,Json,D3.js,我想创建rails应用程序数据的强制布局图,如下所示 我有一个rails应用程序,其表如下图所示: 我想在控制器中创建一个表达式,该表达式可以以所需格式输出JSON,即: { "user":[ {"name":"Myriel"}, {"name":"Napoleon"}, {"name":"Mlle.Baptistine"} ], "relationship":[ {"source":1,"target":0}, {"source":2,"ta

我想创建rails应用程序数据的强制布局图,如下所示

我有一个rails应用程序,其表如下图所示:

我想在控制器中创建一个表达式,该表达式可以以所需格式输出JSON,即:

{
  "user":[
    {"name":"Myriel"},
    {"name":"Napoleon"},
    {"name":"Mlle.Baptistine"}
  ],
  "relationship":[
    {"source":1,"target":0},
    {"source":2,"target":0},
    {"source":3,"target":0}
 ]
}
我猜这将涉及控制器中的查询-类似于:

class GraphController < ApplicationController
  def data
  render :json =>  User.select('name')
  render :json =>  Relationship.select('follower_id') & Relationship.select('followed_id') 
  end
end

但是,如何按照上面的示例将json输出组合成一个输出呢?以及如何重命名输出,使跟随者id成为源,跟随者id成为目标?

您有很多选择:

可以构造适当的结构,然后将其传递给渲染,如下所示:

render json: {
  user: User.select('name')].map { |u|
    { name: u.name }
  },
  relationship: Relationship.select(:follower_id, :followed_id).map { |r|
    { source: r.follower_id, target: r.followed_id }
  }
}
前一种方法可行,但可能会变得相当复杂。此时,您可能应该考虑通过单独的视图层进行JSON呈现。它可以是你喜欢的任何东西:

ERB是一种很有异国情调的生物,我从未在野外见过它,但它仍然很有生命力;您应该能够将模板命名为show.json.erb,然后从那里开始 一个单独的类,它将构建类似选项1中的结构,并以JSON(一种表示器)呈现 ... 最后,对我来说这似乎是最合适的,一些特定于JSON的呈现引擎:RABL、JBuilder或其他什么,有很多 然而,不能低估的是,从这样的控制器呈现JSON被认为是一种不好的味道。在控制器中包含视图代码不利于MVC,MVC是Rails的基础

这给我们留下了一种选择2的味道,根据你自己的直觉,任何与手头任务的复杂性相匹配的东西


希望这有帮助

好的,谢谢,这很有帮助。JBuilder看起来很容易使用。我唯一不知道的是如何引用Jbuilder创建的json。它不会创建物理文件,所以当我尝试在ajax调用中使用它时,我称它为什么?我可能不是100%理解你,但是。。。它与Rails中的其他视图引擎非常相似。它作为Rails控制器操作的一部分被调用。因此,默认情况下,结果直接写入响应流。与ERB-HAML/SLIM/whatever-to-HTML内容的情况相同。