Ruby双重迭代

时间:2015-07-13 14:59:30

标签: ruby ruby-on-rails-4

我想知道是否有最性感的方法进行双重迭代,我的意思是,我对这样的同一个关系进行了两次迭代:

bars = ActiveRecord::Relation [.....]
bars.each do |bar|
  do_something1(bar)
  do_something2(bar)
end
bars.each do |bar|
  do_something3(bar)
  do_something4(bar)
end

显而易见的答案就像是:

bars.each do |bar|
  do_something1(bar)
  do_something2(bar)
  do_something3(bar)
  do_something4(bar)
end

但实际上我真的需要先完成do_something1(bar)和do_something2(bar),然后在同一关系上执行do_something3(bar)和do_something4(bar)。可能这是一个新手问题,但我尝试的任何东西都比这更难。有什么建议吗?

提前致谢。

更新:对不起,我忘了说我已经尝试了这个:

bars.each do |bar|
  do_something1(bar)
  do_something2(bar)
end.each do |bar|
  do_something3(bar)
  so_something4(bar)
end

但是在代码理解方面,很容易理解第一个和改进它只是一个词,这是我没有使用它的方式。

1 个答案:

答案 0 :(得分:5)

一般情况下,您可以对枚举(list comprehensions)进行链接操作,例如

my_array.each { |e| do_something1(e) }.each { |e| do_something2(e) }

由于您的问题涉及ActiveRecord,因此可能有更好的方法来做您想要的事情而不是这个通用示例。