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
我想在模型的 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