繁体   English   中英

在JSON中包含嵌套关联

[英]Include nested associations in JSON

# Person.rb
class Person < ActiveRecord::Base
  has_many :events
end

# Event.rb
class Event < ActiveRecord::Base
  belongs_to :person
  has_many :tables
end

# Table.rb
class Table < ActiveRecord::Base
  belongs_to :event
end

在Person.rb中,我试图创建一种在一个查询中获取所有事件和表的方法

def complete_events
  events.includes(:tables)
end

我可以在控制台中看到它正在加载事件和表

  Event Load (1.1ms)  SELECT "events".* FROM "events" WHERE "event"."person_id" = $1  [["person_id", 17]]
  Table Load (0.5ms)  SELECT "tables".* FROM "tables" WHERE "tables"."event_id" IN (10)

但是,返回的对象只是事件记录。

#<ActiveRecord::Relation [#<Event id: 1, name: "some event">]

如何将返回的记录嵌套如下所示?

#<ActiveRecord::Relation [#<Event id: 1, name: "some event", tables: [id: 1, seats: 4, id: 2, seats: 4]>]

编辑

我能够迭代并创建all_events对象,但它不是嵌套的。

  def complete_events
    all_events = []
    events.includes(:tables).each do |event|
      all_events << event
      all_events << event.tables
    end
    all_events
  end

使用as_json

def complete_events
 as_json(
   include: {
     events: {
       include: tables
   }
 )
end

尝试这个。

  User.all.as_json(methods:[:profile,:addresses])

这里的User是Model,配置文件和address是具有has_many或has_one关联的映射表,因此将要呈现的json将以嵌套方式包含该表,如下所示

user : {
name:"dummy name",
     profile: {},
     addresses: {}
}

因此,在一个对象中,您将拥有所有数据和关联的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM