我想添加一行CSV到表中的记录,除了事实上没有任何实际显示的事实,一切似乎都正常工作。Rake任务不将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原来是你们所有人都指出的语法问题,所以对所有人表示感谢!当我评论它仍然不起作用的原因是一个无关的问题,如果没有@ jvnill的评论,我不会想到这个问题。
很奇怪,没有r ecord被创建,当你调用'#create!'时你不会得到任何异常。你确定你的csv有一些内容吗? – jvnill 2013-02-28 14:15:51
与答案相反,即使调用save和{},只要它通过验证,它仍应该保存。更有用的方法是使用'Entry.new',然后'puts'添加条目!“如果row.save'只是为了确保它确实试图保存记录,而不是仅仅通过循环 – jvnill 2013-02-28 14:17:28
这就是我的想法,并且我尝试了新的并且为行添加了条件。 save'和'“Entry added!”',看起来好像所有东西都保存得很好,当我打开Sublime Text时,可以在添加新记录时快速查看development.sqlite3-journal。我想这可能是其他地方的问题,但我不知道什么可能会搞砸了。 – Jason 2013-02-28 14:28:37