2017-08-17 2 views
0
私はこの配列からのデータに依存しているログインの数十、ログインを作成したい

1つの配列で複数のハッシュを繰り返す方法はありますか?

logins = [ 
     { 
      email: Faker::Internet.email, 
      password: "password", 
      first_name: Faker::Name.first_name, 
      last_name: Faker::Name.last_name 
     }, 
     { 
      email: Faker::Internet.email, 
      password: "password", 
      first_name: Faker::Name.first_name, 
      last_name: Faker::Name.last_name 
     } 
    ] 

回のハッシュ数十をこの配列を書くのではなくコピーして貼り付けのより良い方法は何ですか?私はxximesに慣れていますが、配列上ではうまくいかないでしょう。

logins.each do |login| 
     li = LoginInformation.new(login: login[:email], password: login[:password]) 
     if UserManager.save(li) 
       company_ids.each do |id| 
        li.contacts.create(first_name: login[:first_name], last_name: login[:last_name], email_address: login[:email], company_id: id, is_employee: true) 
       end 
     end 
    end 
+0

あなたは一度に両方のレコードを作成する代わりに、 'accepts_nested_attributes'を使用する場合があります。 – max

+0

[factory_girl](https://github.com/thoughtbot/factory_girl)のgemを使用してください。そうすれば、 'FactoryGirl.create_list(:login、25)'のようなものを書くことができます。これは、現在のすべての回答よりもはるかにクリーンです。 – Ilya

答えて

4

一つの方法はそうのように、ブロックとして含まFaker方法でハッシュオブジェクトを渡すことですあなたのユースケースに必要な要素の数。

希望すると便利です。

2

.timesあなたは配列を取得するために.mapを呼び出すことができる列挙子を返します。

は、ここで私はログインを渡すコードです。

logins = 10.times.map do 
    { 
    email: Faker::Internet.email, 
    password: "password", 
    first_name: Faker::Name.first_name, 
    last_name: Faker::Name.last_name 
    } 
end 

または、Zoran Pesicが述べたようにArray.newを使用してください。

logins = Array.new(10) { { email: Faker::Internet.email, password: 'password', first_name: Faker::Name.first_name, last_name: Faker::Name.last_name } } 

あなたは数字で、この例では10を置き換えることができます:あなたのlogins配列の作成を簡素化する

0

あなたもこの方法を行うことができる値を複数回

logins=[] 
    for i in 0..10 
    logins << 
      { 
       email: Faker::Internet.email, 
       password: "password", 
       first_name: Faker::Name.first_name, 
       last_name: Faker::Name.last_name 
      } 
    end 
+0

'10.times {login << ..}'も使うことができます –

0

を挿入するためにforループを使用することができます。

10.times do 
    login = { email: Faker::Internet.email, password: 'password', first_name: Faker::Name.first_name, last_name: Faker::Name.last_name } 
    li = LoginInformation.new(login: login[:email], password: login[:password]) 
    if UserManager.save(li) 
    company_ids.each do |id| 
     li.contacts.create(first_name: login[:first_name], last_name: login[:last_name], email_address: login[:email], company_id: id, is_employee: true) 
    end 
    end 
end 
関連する問題