2012-08-28 36 views
2

在这种情况下,localesaliases共享相同的结构,因此我以相同的方式遍历它们,只更改其名称。如何同时迭代两个相似阵列上的each_value

if yml_site['locales'].present? 
    yml_site['locales'].each_value do |yml_locale| 
      site = Site.find_or_create_by_domain(
       locale: yml_locale['locale'], 
       domain: yml_locale['domain'], 
       title: yml_locale['title'], 
       parent: yml_site['domain'], 
    end 
end 
if yml_site['aliases'].present? 
    yml_site['aliases'].each_value do |yml_alias| 
      site = Site.find_or_create_by_domain(
       locale: yml_alias['locale'], 
       domain: yml_alias['domain'], 
       title: yml_alias['title'], 
       parent: yml_alias['domain'], 
    end 
end 
end 

我想简化像[yml_site['locales'],yml_site['aliases']].each.each_value此代码的东西,但obviusly它不工作。任何想法如何在同一个查询上迭代yml_site['locales']yml_site['aliases']

回答

5

如何:

(yml_site['locales'] + yml_site['aliases']).each_value do |yml_locale| 
    ... 
end 
1

简单的方法是迭代块推到一个共同的方法,并通过方法调用访问它。

其他替代, 只是执行数组此外,

x1 = [1,2,3] 
x2 = [3,4,5] 

x1 + x2, and then perform iteration as done for array. 

并行执行的操作,您可以使用

x1.zip(x2).each do |u,v| 
    p u 
    p v 
    #perform find_or_create operation 
end