2017-08-17 2 views
0

Je veux créer des dizaines de connexions qui reposent sur les données de ce tableau, les connexions:Comment répéter un seul hachage plusieurs fois dans un tableau?

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 
     } 
    ] 

Quelle est la meilleure façon d'écrire ce tableau plutôt que de copier et coller que des dizaines de hachage de fois? Je suis familier avec x.times mais cela ne fonctionnerait pas sur un tableau.

Voici le code où je passe les connexions:

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

Vous pouvez utiliser 'accepts_nested_attributes' au lieu de créer deux enregistrements à la fois. – max

+0

Utilisez la gemme [factory_girl] (https://github.com/thoughtbot/factory_girl) pour cela. Ensuite, vous serez capable d'écrire quelque chose comme 'FactoryGirl.create_list (: login, 25)', ce qui est beaucoup plus propre que toutes les réponses actuelles. – Ilya

Répondre

4

Une façon de simplifier la création de votre tableau logins est de passer l'objet de hachage avec les inclus Faker méthodes comme un bloc, comme suit:

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

Vous pouvez remplacer le 10 dans cet exemple avec le nombre des éléments requis pour votre cas d'utilisation.

Espérons que cela aide!

2

.times retourne un recenseur que vous pouvez appeler sur .map pour obtenir un tableau.

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

Ou utilisez Array.new tel que mentionné par Zoran Pesic.

0

Vous pouvez utiliser la boucle pour insérer les valeurs plusieurs fois

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

Vous pouvez utiliser '10.times {login << ..}' aussi bien –

0

peut faire de cette façon aussi:

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