Похоже, что FasterCSV теперь является частью ядра Ruby начиная с Ruby 1.9, так что это то, что я в итоге сделал, чтобы достичь целей, указанных в моем вопросе выше:
@importedfile = Import.find(params[:id])
filename = @importedfile.csv.path
CSV.foreach(filename, {:headers => true}) do |row|
@post = Post.find_or_create_by_email(
:content => row[0],
:name => row[1],
:blog_url => row[2],
:email => row[3]
)
end
flash[:notice] = "New posts were successfully processed."
redirect_to posts_path
Внутри функции find_or_create_by_email
находится сопоставление столбцов базы данных со столбцами файла CSV: row[0], row[1], row[2], row[3]
.
Поскольку это find_or_create
функция, мне не нужно явно вызывать @post.save
, чтобы сохранить запись в базе данных.
Если есть лучший способ, пожалуйста, обновите или добавьте свой собственный ответ.