2

この場合、両方とも同じ構造localesaliases共有しているため、名前だけを変更して同じ方法で繰り返します。

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いましたが、明らかに機能していません。どうすれば同じクエリで両方yml_site['locales']を繰り返すことができますか?yml_site['aliases']

4

2 に答える 2

5

これはどう:

(yml_site['locales'] + yml_site['aliases']).each_value do |yml_locale|
  ...
end
于 2012-08-28T07:55:43.937 に答える
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
于 2012-08-28T09:20:57.267 に答える