javascript - 从数据库查询 rails 创建 JSON

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

我想为我的 Rails 应用程序数据创建一个强制布局图,如 here in d3

我有一个 Rails 应用程序,其中包含如下图所示的表格:

enter image description here

我想在 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 成为目标?

最佳答案

你有很多选择:

  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 }
      }
    }
    
  2. 前一种方法可行,但可能会变得相当复杂。此时,您可能应该考虑通过单独的 View 层进行 JSON 渲染。它可以是您喜欢的任何内容:

    • ERB,这是相当奇特的,我从未在野外见过它,但仍然相当可行;您应该能够将模板命名为 show.json.erb 并从那里开始
    • 一个单独的类,将构建如选项 no 中的结构。 1 以 JSON 形式呈现,一种演示者
    • ...最后,这对我来说似乎是最合适的,一些特定于 JSON 的渲染引擎:RABL、JBuilder 或其他什么,那里有一大堆

但是,不应低估从这样的 Controller 渲染 JSON 被认为是一种坏味道。在 Controller 中包含 View 代码违背了 MVC,而 MVC 是 Rails 的基础。

这给我们留下了选项 #2 的 flavor ,无论与手头任务的复杂性相匹配(根据您自己的直觉)。

希望这有帮助!

关于javascript - 从数据库查询 rails 创建 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30566048/

相关文章:

ruby-on-rails - 统计过去 7 天内在 Rails 中创建的用户数量? [需要 Count 语法帮助]

ruby-on-rails - Rails 路线 - 两条不同的路线显示相同的信息

javascript - JSON.parse() 无法解析带有 HTML 的字符串

android - 在android中获取对HTTP查询的JSON响应

javascript - Angular 中的多层嵌套组件

javascript - 如何表征 DOM 的 z 索引? (2)

javascript - getusermedia 支持哪些设备

javascript - 从表单提交中提取 ID 的更好方法 Javascript/Django

ruby-on-rails - Rails 页面特定维护模式

json - 如何在 Dart 中处理 JSON