У меня очень сложный запрос на начальном уровне, который я не могу решить. Загрузка моей страницы занимает около 6 7 секунд на локальной машине.
Запрос похож на пользователя
self.groups.collect(&:reports).flatten.paginate
Теперь я запускаю цикл, который выглядит примерно так:
reports.each do |report|
report.name
report.user.name
report.user.image.attachment.url(:thumb) #User has_one :image , Image belongs_to :user
report.questions.each do |question|
question.name
question.answers.each do |answer|
answer.name
end
end
report.comments.each do |comment|
comment.name
comment.user.name
comment.user.image.attachment.url(:thumb) #User has_one :image , Image belongs_to :user
end
end
В нем много вложенных циклов, которые требуют большого количества включений, но я не могу понять, в каком направлении мне следует действовать. Мой предыдущий вопрос был N+1 в отношениях rails с активными записями?
------------------РЕДАКТИРОВАТЬ----
я могу сделать
self.groups.includes(:reports => [:user, :questions])
or
self.groups.includes(:reports => [:user => [:image]])
но нет
self.groups.includes(:reports => [:user => [:image], :questions])
что с этим не так??
------------------РЕДАКТИРОВАТЬ----
self.groups.includes(:reports => [:questions, :user => [:image]]).collect(&:reports).flatten.paginate(:page => page, :per_page => 6)
Это то, что, кажется, работает для меня без дополнительной/менее энергичной загрузки в соответствии с пулей ( https://github.com/flyerhzm/bullet ), но для загрузки запросов требуется около 10 секунд, и это похоже на огромную нагрузку. Предлагаются ли какие-либо дальнейшие улучшения ??
------------------РЕДАКТИРОВАТЬ----
self.groups.includes(:reports => [:questions, .........]).collect(&:reports).paginate
изменился на
self.group_reports.includes(:questions, ....... ).paginate
очень помог
В User Model определено что-то вроде
has_many :reports
has_many :group_reports, :through => :groups, :source => :reports