Rake任务不将CSV添加到数据库

时间:2013-02-28 14:05:25

标签: ruby-on-rails ruby-on-rails-3 csv rake-task

我正在尝试将CS​​V行添加到表格中的记录中,除了实际上没有显示任何内容之外,一切似乎都正常工作。

这是我的Rake任务:

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中的标题被命名为与属性匹配。

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

耙子结束后根本没有任何记录。有什么明显的东西我做错了吗?看来这是我见过的大多数例子。

修改感谢您的所有答案和评论!显然这一直是语法上的缺陷,我将尝试你的建议,我会在之后更新。再次感谢!

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

3 个答案:

答案 0 :(得分:1)

Entry.create!不需要分配到行,也不需要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方法将填充行并保存它。

答案 1 :(得分: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)

答案 2 :(得分:0)

命名空间:csv do

desc“导入CSV数据”   任务:c_up => :环境做

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

端 端