ほとんどの部分で機能している次のコードがあります。ただし、メールアドレスが既に存在するため、保存できないというエラーメッセージが表示されます。最初に destroy_all を実行すると、どのようにそれが可能になりますか?
私の推測では、同じメールアドレスの行が複数あり (それは本当です)、どういうわけか、以下の手順で挿入された行が破棄されないようです。
それらも考慮に入れるように強制する方法はありますか?
namespace :db do
desc "load vdc members from google CSV"
task :load_csv_data => :environment do
require 'csv'
CSV.foreach("data.csv",{:headers=>:first_row}) do |row|
User.destroy_all(:email => row[7])
user = User.new(
:password => "temppwd",
:name => row[1],
:first_name => row[2],
:birth_date => row[3],
:street => row[4],
:zipcode => row[5],
:town => row[6],
:email => row[7],
:certificate_id => Certificate.find_by_name(row[9]).id,
:external_certificates => row[11],
:education_level => row[12],
:phone_number => row[15]
)
if user.save
puts "saved " + row[1] + " " + row[2]
else
puts "Could not save " + row[1] + " " + row[2] + " due to "
puts user.errors.full_messages.first if user.errors.any?
end
end
end
end