Ruby on rails 如何传递呈现:json=>;到d3.js
我试图将json的输出传递到一个d3.js图,但我真的不明白如何引用从我的控制器生成的jsonRuby on rails 如何传递呈现:json=>;到d3.js,ruby-on-rails,json,d3.js,Ruby On Rails,Json,D3.js,我试图将json的输出传递到一个d3.js图,但我真的不明白如何引用从我的控制器生成的json class UserController < ApplicationController def index render :json => User.including_relationships end end 模型是 class User < ActiveRecord::Base has_many :relationships end class U
class UserController < ApplicationController
def index
render :json => User.including_relationships
end
end
模型是
class User < ActiveRecord::Base
has_many :relationships
end
class User
def self.including_relationships
User.joins("INNER JOIN relationships ON users.id = relationships.user_id").select("users.name, relationships.user_id, relationships.followsid,users.value").each_with_object(Hash.new{|h, k| h[k] = []}) do |a, obj|
obj['nodes'] << a.slice('name')
obj['links'] << a.slice('user_id', 'followsid', 'value')
end
end
end
我需要更改对json的引用,但我不知道如何更改
更新
我已经按照这里的建议添加了ajax
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Basic HTML5 Template</title>
<link href="stylesheets/style.css" rel="stylesheet" type="text/css" media="screen" />
<script src="example.js"></script>
</head>
<body>
<script>
$.ajax({
type: 'GET',
url: 'localhost:3000/user',
success: function(data) {
var miserables = data
}
})
<script src="http://d3js.org/d3.v3.min.js"></script>
<script>
var width = 960,
height = 500;
var color = d3.scale.category20();
var force = d3.layout.force()
.charge(-120)
.linkDistance(30)
.size([width, height]);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json(miserables, function(error, graph) {
force
.nodes(graph.nodes)
.links(graph.links)
.start();
var link = svg.selectAll(".link")
.data(graph.links)
.enter().append("line")
.attr("class", "link")
.style("stroke-width", function(d) { return Math.sqrt(d.value); });
var node = svg.selectAll(".node")
.data(graph.nodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", 5)
.style("fill", function(d) { return color(d.group); })
.call(force.drag);
node.append("title")
.text(function(d) { return d.name; });
force.on("tick", function() {
link.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
node.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});
});
</script>
</script>
</body>
</html>
基本HTML5模板
$.ajax({
键入:“GET”,
url:'localhost:3000/用户',
成功:功能(数据){
var悲惨=数据
}
})
可变宽度=960,
高度=500;
var color=d3.scale.category20();
var-force=d3.layout.force()
。收费(-120)
.linkDistance(30)
.尺寸([宽度、高度]);
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
d3.json(可怜虫,函数(错误,图形){
力
.nodes(图.nodes)
.links(graph.links)
.start();
var link=svg.selectAll(“.link”)
.数据(图表.链接)
.enter().append(“行”)
.attr(“类”、“链接”)
.style(“笔划宽度”,函数(d){return Math.sqrt(d.value);});
var node=svg.selectAll(“.node”)
.数据(图.节点)
.enter().append(“圆”)
.attr(“类”、“节点”)
.attr(“r”,5)
.style(“fill”,函数(d){返回颜色(d.group);})
.呼叫(强制拖动);
node.append(“标题”)
.text(函数(d){返回d.name;});
force.on(“勾号”,函数(){
attr(“x1”,函数(d){返回d.source.x;})
.attr(“y1”,函数(d){返回d.source.y;})
.attr(“x2”,函数(d){返回d.target.x;})
.attr(“y2”,函数(d){返回d.target.y;});
attr(“cx”,函数(d){return d.x;})
.attr(“cy”,函数(d){返回d.y;});
});
});
当我这样做时,我看到的只是json结果,它没有包含在index.html.erb中。我不知道为什么。我编辑了上面的代码以反映我所做的更改您需要使用AJAX查询端点:
$.ajax({
type: 'GET',
url: 'your_url',
success: function(data) {
var miserables = data
}
})
然后
d3.json(miserables, function(error, graph) {
因此,“your_url”应该是我调用render=>:json的控制器类?否。“your_url”应该是路由到控制器的url。也就是“localhost:3000/用户”,如果它是开发模式的话。有点混乱。ajax如何从var=data中知道“数据”是什么。这是否必须指定控制器中类的名称?控制器使用json数据进行响应:
render:json=>User.include_relationships
。您可以通过url调用控制器方法。您可以阅读更多关于MVC的内容,但如果我有两个类都在同一个控制器中返回json呢?ajax如何知道调用哪一个“数据”。
$.ajax({
type: 'GET',
url: 'your_url',
success: function(data) {
var miserables = data
}
})
d3.json(miserables, function(error, graph) {