Rails 在模型的 class 方法中迭代集合而不重新加载查询?

Rails Iterate over collection in model's class method without reloading query?

我想在模型的 class 方法中迭代一个集合。 不幸的是,唯一的方法似乎是使用所有 :

def self.do_something
  all.each do |question|
    #do stuff
  end
end

questions = Question.pick_random.load
User.all.each { |user| questions.do_something_for(user) }

问题是:每次调用该方法时都会加载问题... 很明显,它很慢。有什么方法可以不重新加载查询吗?

您可以记住结果:

def self.do_something
  @do_something ||= begin
    all.each do |question|
      #do stuff
    end
  end
end

然后,查询(和计算)只会在您第一次调用该方法时执行。下一次,它只会 return @do_something