0

这是数组数据:

data =  [

        # == DB Seeds == 
            ["name", "Peter", "Pan", "Ulla"],
            ["t_u_a", "4405", "6710", "8010"],
            ["t_u_b", "5590", "5590", "9080"]

]

它是列名、值、值、值。

Rails 有一个很好的数组创建方法吗?

而不是我必须写:

    Product.create([{ name: 'Peter', tu_a_a: '4405', tu_a_b: '5590' },

    { name: 'Pan', tu_a_a: '6710', tu_a_b: '5590'  }, 

    { name: 'Ulla', tu_a_a: '8010', tu_a_b: '9080'  }])

更新:

[{"name"=>"name", "Peter"=>"Peter", "Pan"=>"Pan", "Ulla"=>"Ulla", nil=>nil}, 

{"name"=>"t_u_a", "Peter"=>"4405", "Pan"=>"6710", "Ulla"=>"8010", nil=>nil}, 

{"name"=>"t_u_b", "Peter"=>"5590", "Pan"=>"5590", "Ulla"=>"9080", nil=>nil}]
4

1 回答 1

3

您可以使用ActiveRecord 创建函数,但首先您需要将数据重新格式化为哈希数组,而不是二维数组,其中第一个数组是列名。这是一个快速的功能(如果你使用它,请确保你测试它,因为我没有) -

def convert_to_hashes(my_array)
    keys = my_array.map {|d| d[0]}
    new_array = []
    count = 0

    (1..my_array[0][0].length-1).each do |values|
        new_hash = {}
        count += 1
       (0..keys.length-1).each do |index|
            new_hash[keys[index]] = my_array[index][count]
        end
        new_array << new_hash
    end

    new_array
end

所以你最终得到[your model name].create(convert_to_hashes(my_data))

于 2013-02-19T16:29:32.337 回答