我想知道是否有最性感的方法进行双重迭代,我的意思是,我对这样的同一个关系进行了两次迭代:
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
但是在代码理解方面,很容易理解第一个和改进它只是一个词,这是我没有使用它的方式。
答案 0 :(得分:5)
一般情况下,您可以对枚举(list comprehensions)进行链接操作,例如
my_array.each { |e| do_something1(e) }.each { |e| do_something2(e) }
由于您的问题涉及ActiveRecord,因此可能有更好的方法来做您想要的事情而不是这个通用示例。