我正在尝试将CSV行添加到表格中的记录中,除了实际上没有显示任何内容之外,一切似乎都正常工作。
这是我的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的评论,我不会想到这个问题。
答案 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
端 端