如何在一个数组中多次重复单个哈希?

时间:2017-08-17 02:20:16

标签: ruby-on-rails ruby ruby-on-rails-3 faker

我想创建几十个依赖于此数组中的数据的登录,登录:

    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

4 个答案:

答案 0 :(得分:4)

简化logins数组创建的一种方法是将包含Faker方法的哈希对象作为块传递,如下所示:

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

您可以将此示例中的10替换为用例所需的元素数。

希望这有帮助!

答案 1 :(得分: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

答案 2 :(得分:0)

您可以使用for循环多次插入值

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

答案 3 :(得分: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