我想将我的rails应用程序数据的强制布局图创建为here in d3
我有一个带有表格的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输出合并为一个?以及如何重命名输出,以便follower_id成为源,follow_id成为目标?
答案 0 :(得分:1)
你有很多选择:
您可以构建适当的结构,然后将其传递给render
,就像这样:
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渲染。它可以是你喜欢的任何东西:
show.json.erb
,然后从那里开始然而,不应低估从这样的控制器渲染JSON被认为是难闻的气味。在控制器中拥有视图代码会违反MVC,即基于Rails的Rails。
这给我们留下了选项#2的味道,无论与手头任务的复杂程度相匹配(根据你自己的直觉)。
希望这有帮助!