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

时间:2018-01-02 18:19:37

标签: ruby-on-rails rails-activerecord class-method

我想在Model的类方法中迭代一个集合。 不幸的是,唯一的方法似乎是全部使用:

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) }

问题是:每次调用方法时都会加载问题... 显然这很慢。有没有方法不重新加载查询?

1 个答案:

答案 0 :(得分:1)

你可以记住结果:

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

然后,查询(和计算)将仅在您第一次调用方法时执行。下一次,它将返回@do_something