如何将两个查询合并到rails中的一个JSON文件中?

时间:2015-06-19 17:46:35

标签: ruby-on-rails json

我需要创建一个d3图。这需要.json文件作为数据源。 这个json文件的格式如下

{
  "nodes":[
    {"name":"Myriel"},
    {"name":"Jonny"}
  ],
  "links":[
    {"source":1,"target":2}
  ]
}

为了创建这个,我需要在数据库中查询两个表。为格式化原因执行此操作的最简单方法是实际创建两个查询,然后将它们连接到一个json中(json文件很奇怪,因为'source'指的是节点数组中节点的位置而不是数据库id,因此需要这样做)。用户与作为一个用户和多个关系的关系有关。

在我的模型user.rb中,我有两个简单的查询

def User.allnames
    User.pluck(:name)
  end

  def User.allfollowers
    Relationship.pluck(:follower_id, :following_id)
  end

我想结合这两个查询的输出,在我的控制器中以上述格式创建一个json(下面的代码是无意义的,但说明了我想要做的事情:

def data
  #Bring in the two queries from the model
  @usersall = User.allnames
@userallfollowers = User.allfollowers

#Somehow combine them
#Then output json as below I guess

    respond_to do |format|
      format.html # index.html.erb
      format.json {  render json: @users }

      end
end

1 个答案:

答案 0 :(得分:0)

我假设这样说:用户属于许多关系,并且关系有很多用户。在这种情况下,你可以这样做:

# In your controller method
@users = User.all

# other code ...

respond_to do |format|
  format.json { render json: @users.to_json( only: [:name], include: { :relationship => { only: [:follower_id, :following_id ] } }  })
end