0

我正在尝试通过 csv 将数据插入数据库。这是我的控制器代码

    需要'csv'
      定义索引

      结尾

      定义添加
        @filename=CSV::Reader.parse(params[:dump][:file])
        n=0
        CSV::foreach(@filename, :headers => true) 做 |row|
        Student.new(row.to_hash.symbolize_keys).save
        n=n+1
        结尾
        flash.now[:message]="CSV 导入成功,#{n} 条新记录添加到数据库"
      结尾

现在,当我插入 csv 文件时,我收到了错误

**can't convert CSV::IOReader into String**

我的红宝石版本是 1.8.7

任何帮助将不胜感激。

4

1 回答 1

0

如果您使用的是 Ruby,则可以使用以下代码:

require 'csv'

def index

end

def add
  n=0
  CSV::foreach(params[:dump][:file]) do |row|
    Student.new(row.to_hash.symbolize_keys).save
    n=n+1
  end
  flash.now[:message]="CSV Import Successful,  #{n} new records added to data base"
end

您可以在http://apidock.com/ruby/CSV上获取有关 CSV:foreach 的更多信息


我上面的回复失败了,因为我认为 [:dump][:file] 是文件的路径(字符串对象),但是看到那个错误,你应该先读取文件(它是一个 TempFile 对象),并且然后将内容解析为字符串:

require 'csv'
  def index

  end

  def add
    n=0
    CSV::parse(params[:dump][:file].read, :headers => true) do |row|
      Student.new(row.to_hash.symbolize_keys).save
      n=n+1
    end

    flash.now[:message]="CSV Import Successful,  #{n} new records added to data base"
  end
于 2013-08-07T13:16:59.197 回答