我想为我的 Rails 应用程序数据创建一个强制布局图,如 here in d3
我有一个 Rails 应用程序,其中包含如下图所示的表格:
我想在 Controller 中创建一个表达式,它可以以所需的格式输出 JSON:
{
"user":[
{"name":"Myriel"},
{"name":"Napoleon"},
{"name":"Mlle.Baptistine"}
],
"relationship":[
{"source":1,"target":0},
{"source":2,"target":0},
{"source":3,"target":0}
]
}
我想这将涉及 Controller 中的查询 - 类似于:
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 成为源,followed_id 成为目标?
最佳答案
你有很多选择:
您可以构造适当的结构,然后将其传递给
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 } } }
前一种方法可行,但可能会变得相当复杂。此时,您可能应该考虑通过单独的 View 层进行 JSON 渲染。它可以是您喜欢的任何内容:
- ERB,这是相当奇特的,我从未在野外见过它,但仍然相当可行;您应该能够将模板命名为
show.json.erb
并从那里开始 - 一个单独的类,将构建如选项 no 中的结构。 1 以 JSON 形式呈现,一种演示者
- ...最后,这对我来说似乎是最合适的,一些特定于 JSON 的渲染引擎:RABL、JBuilder 或其他什么,那里有一大堆
- ERB,这是相当奇特的,我从未在野外见过它,但仍然相当可行;您应该能够将模板命名为
但是,不应低估从这样的 Controller 渲染 JSON 被认为是一种坏味道。在 Controller 中包含 View 代码违背了 MVC,而 MVC 是 Rails 的基础。
这给我们留下了选项 #2 的 flavor ,无论与手头任务的复杂性相匹配(根据您自己的直觉)。
希望这有帮助!
关于javascript - 从数据库查询 rails 创建 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566048/