[英]Rake task not adding CSV to database
我正在尝试将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的评论,我不会想到这个问题。
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方法将填充行并保存它。
尝试:
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)
命名空间: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
结束
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.