【问题标题】:Initialize object with excel file contents and save to database用excel文件内容初始化对象并保存到数据库
【发布时间】:2015-03-08 20:27:47
【问题描述】:

我觉得我正在服用疯狂的药丸,但我刚刚撞到了一堵砖墙,再也不能解决这个问题了。答案似乎很简单,但我的头脑已经麻木了,我无法突破这堵墙。

我正在使用 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 访问。我觉得我做错了,因为我实际上是在尝试根据电子表格的长度创建多个对象并保存每个新行以填充我的数据库。就像我说的,可能是超级垃圾,但我缺少一些基本的东西,感谢您的帮助。

【问题讨论】:

    标签: arrays excel postgresql object ruby-on-rails-4


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2017-12-10
      • 1970-01-01
      相关资源
      最近更新 更多