# 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
complete_events
, и доступ к таблицам для событий не вызовет дополнительных запросов. - person SteveTurczyn   schedule 07.11.2016