我正在迭代一些ActiveRecord
模型,如下所示:
(例如,让我们说你不能直接得到所有的动物 流派。它迭代相关的问题,而不是关联的东西):
Animal.all.each do |animal|
animal.families.each do |family|
family.genres.each do |genre|
genre.gsub("o","a")
genre.save!
end
end
end
我认为这不是最好的方法。有没有解决方案让它变得更好?就像在.each
模型上执行each
的迭代器一样?
答案 0 :(得分:3)
提高速度的一种方法是尝试首先完成所有查询。
animals = Animal.includes(families: genres)
animals.each do |animal|
animal.families.each do |family|
family.genres.each do |genre|
genre.gsub("o","a")
genre.save!
end
end
end
答案 1 :(得分:2)
如何使用flat_map
:
Animal.all.flat_map(&:families).flat_map(&:genres).each do |genre|
genre.gsub("o","a")
genre.save!
end
(这当然完全忽略了任何ActiveRecord
相关的解决方案,将更好“