循环遍历在Ruby中分配数组值的一组哈希的更好方法

时间:2015-12-09 23:16:49

标签: ruby postgresql file uploading

我正在尝试将数据插入Postgres。我有一个数据数组,我试图为每列分配一个数组的值。这是一个例子。

pg_insert = ['12/09/2015', 41, 'test account', '41.0']
Table.create([date: pg_insert[0],
            account_number: pg_insert[1],
            account_name: pg_insert[2],
            values: pg_insert[3]])

有没有办法我可以循环这个,所以我可以把我放在pg_insert而不是输入数字?我不确定如何循环create()参数。有没有办法解决这个问题?

任何建议都会非常感谢。

1 个答案:

答案 0 :(得分:2)

Table.create正在接受哈希,我敢肯定。

以下是您可以做的事情:

  1. 制作一个名为keys的数组,其中包含4个符号:date:account_number:account_name:values
  2. pg_insert已经是一个数组。
  3. 现在您可以将两个阵列放在一起以制作所需的哈希:Hash[keys.zip(pg_insert)]
  4. 这样您就可以拨打Table.create这样的电话:Table.create(Hash[keys.zip(pg_insert)])
  5. 这是完成的代码:

    keys = [:date, :account_number, :account_name, :values]
    pg_insert = ['12/09/2015', 41, 'test account', '41.0']
    Table.create(Hash[keys.zip(pg_insert)])  # or Table.create Hash[keys.zip(pg_insert)]  if you don't want so many parentheses.
    

    请注意pg_insert必须与keys的顺序相同。

    您可以阅读有关Array#zip和Hash.new的更多信息,以了解这些工作原理。此SO链接也可能有所帮助:Converting an array of keys and an array of values into a hash in Ruby