Ruby on rails Rails中令人讨厌的深嵌套循环

Ruby on rails Rails中令人讨厌的深嵌套循环,ruby-on-rails,nested-loops,Ruby On Rails,Nested Loops,我有一个嵌套的循环,它可以深入到4层,找到所有的图像小部件并计算它们的大小。这看起来真的很低效和讨厌!我曾经考虑过将organization\u id放在小部件模型中,这样我就可以调用organization.widgets.named\u scope之类的东西,但我觉得这是一条不好的捷径。有更好的办法吗?谢谢 class Organization < ActiveRecord::Base ... def get_image_widget_total total_size =

我有一个嵌套的循环,它可以深入到4层,找到所有的图像小部件并计算它们的大小。这看起来真的很低效和讨厌!我曾经考虑过将organization\u id放在小部件模型中,这样我就可以调用organization.widgets.named\u scope之类的东西,但我觉得这是一条不好的捷径。有更好的办法吗?谢谢

class Organization < ActiveRecord::Base
...
  def get_image_widget_total
    total_size = 0
    self.trips.each do |t|
      t.phases.each do |phase|
        phase.pages.each do |page|
          page.widgets.each do |widget|
            if widget.widget_type == Widget::IMAGE
             total_size += widget.image_file_size
            end
         end
       end
     end
    end
    return total_size
  end
...
end

如果这是以任何频率发生的事情,那么使用直接SQL可能会更好

如果这是以任何频率发生的事情,那么使用直接SQL可能会更好

>P>对于性能和内存方面的考虑,您应该考虑发布一个选择SUMUTCORIZHORE语句,例如

Widget.sum(
  :total_size,
  :conditions => [ 'widget_type = ? AND organization_id = ?',
    Widget::IMAGE', self.id ],
  :joins => [ :pages, :phases, :trips ]
)

对于性能和内存方面的考虑,您应该考虑发布一个SUMLUTHORYSIZE语句,例如

Widget.sum(
  :total_size,
  :conditions => [ 'widget_type = ? AND organization_id = ?',
    Widget::IMAGE', self.id ],
  :joins => [ :pages, :phases, :trips ]
)

谢谢,这真的帮了我很大的忙!我以前从未想过使用联接汉克斯,这真的帮了我很大的忙!我以前从未想过使用联接P