2017-08-17 45 views
0

我想创建几十个登录的依赖于数据从该阵列,登录:如何在一个数组中重复多次哈希?

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

什么是写这个数组,而不是复制和粘贴散列数十次的更好的办法?我熟悉x.times,但这不适用于数组。

这里就是我通过在登录的代码:

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方法作为一个块,像这样:

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

可以用数字替换10在这个例子中您的用例所需的元素。

希望这会有所帮助!

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阵列的创建

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

插入值能做到这样也:

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 
相关问题