使用 excel 文件内容初始化对象并保存到数据库

Initialize object with excel file contents and save to database

我觉得我正在服用疯狂的药丸,但我只是碰壁了,不能再破解了。答案看似简单,心却麻木,无法冲破这堵墙

我正在使用 Roo gem 导入 excel 文档(xls 格式)并将其推送到数组中。我结束了一系列的数组。很简单,效果很好。

然后我尝试获取该数组的值并将它们分配给对象的属性。诀窍似乎是遍历行,将数组值分配给适当的对象属性,保存,然后移动到下一行。我确定我在做的是各种垃圾,但我卡住了,想不出解决办法。

这是我的控制器:

class PlanesController < ApplicationController
  def new
    @plane = Plane.new
    @plane.upload
  end
end

这是我的模型:

    require 'roo'

    class Plane < ActiveRecord::Base
        attr_accessor :id, :name, :version

    def upload
            arr = []
            sheet1 = Roo::Spreadsheet.open('lib/assets/test.xls')
            sheet1.each { |hash| arr<<hash}

            i = 0
            while i < arr.length do
                @id = arr[i][0].to_int
                @name = arr[i][1]
                @version = arr[i][2]
                i += 1
            end
        end
    end

基本上是如何将存储在 'arr' 数组中的值分配给我的对象?我希望 @id 最终成为 Plane.id,它在我的控制器中由实例变量 @plane 访问。我觉得我做错了,因为我实际上是在尝试根据电子表格的长度创建多个对象,并保存每个新行以填充我的数据库。就像我说的,可能是超级垃圾,但我缺少一些基本的东西,感谢您的帮助。

我刚刚更改了我的控制器的新操作以包含 @person = Plane.create(plane_params),然后将 plane_params 放入我包含在我的控制器中的模块中...能够使用较新的 Rails 4 个强大的参数,还导入了 .xls 文件,所有这些都在那个单一的方法中(而不是我的模型,回想起来如果我使用 .create 就没有多大意义)。现在工作起来很有魅力,但我想知道是否有一个 gem/3rd 我错过的派对插件。