我正在迭代一些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

我认为这不是最好的办法。有什么办法让它变得更好吗?就像一个迭代器在模型上做的那样?

最佳答案

使用flat_map如何:

Animal.all.flat_map(&:families).flat_map(&:genres).each do |genre|
  genre.gsub("o","a")
  genre.save!
end

(当然,这完全忽略了任何ActiveRecord相关的解决方案,这会更好)

关于ruby-on-rails - 在Ruby中将每个堆栈堆叠在一起,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24287333/

10-12 16:04