0

我正在尝试将 CSV 行添加到表中的记录中,除了实际上没有显示任何内容之外,一切似乎都运行良好。

这是我的耙子任务:

namespace :csv do

  desc "Import CSV Data"
  task :c_up => :environment do

    require 'csv'

    csv_file_path = 'db/main.csv'

    CSV.foreach(csv_file_path, :headers => true) do |row|
      row = Entry.create!({
        :one => row[0],
        :two => row[1],
        :three => row[2],
        :four => row[3],
        :five =>row[4],
        :six => row[5],
        :seven => row[6],
        :eight => row[7],
        :nine => row[8],
        :ten => row[9]
      })
      row.save
      puts "Entry added!"

    end
  end
end

我的 CSV 中的标题被命名为与属性匹配。

当我运行任务时,我没有收到任何错误,并且所有“已添加条目!” 出现在控制台中。我在没有 and 的情况下尝试过row =row.save因为我已经看到很多没有这些的例子,但它没有帮助。

耙子完成后,根本没有任何记录。有什么明显的我做错了吗?似乎这是在遵循我见过的大多数示例。

编辑 感谢您的所有回答和评论!显然,这一直到语法都有缺陷,我将尝试您的建议,然后我会更新它。再次感谢!

编辑2 原来是你们都指出的语法问题,所以+1感谢大家!我评论它仍然不起作用的原因是一个不相关的问题,如果没有@jvnill 的评论,我不会想出来。

4

3 回答 3

1

Entry.create!不需要分配给 row 也不需要row.save. 也知道 '{}' 只是这样做:

Entry.create!(
        :one => row[0],
        :two => row[1],
        :three => row[2],
        :four => row[3],
        :five =>row[4],
        :six => row[5],
        :seven => row[6],
        :eight => row[7],
        :nine => row[8],
        :ten => row[9]
      )

create 方法将填充该行并保存它。

于 2013-02-28T14:10:17.643 回答
1

尝试:

row = Entry.new(
        :one => row[0],
        :two => row[1],
        :three => row[2],
        :four => row[3],
        :five =>row[4],
        :six => row[5],
        :seven => row[6],
        :eight => row[7],
        :nine => row[8],
        :ten => row[9]
      )
      row.save!

没有{ }保存!

您甚至可以尝试这样做,以使其更简单:

Entry.create!(row.to_hash)
于 2013-02-28T14:15:38.833 回答
0

命名空间 :csv 做

desc "导入 CSV 数据" 任务 :c_up => :environment do

require 'csv'

csv_file_path = 'db/main.csv'

CSV.foreach(csv_file_path, :headers => true) do |row|
  Entry.create!({
    :one => row[0],
    :two => row[1],
    :three => row[2],
    :four => row[3],
    :five =>row[4],
    :six => row[5],
    :seven => row[6],
    :eight => row[7],
    :nine => row[8],
    :ten => row[9]
  })
end

结束结束

于 2013-02-28T14:52:42.270 回答