【发布时间】:2014-03-21 04:58:59
【问题描述】:
假设我有以下课程:
class Buyer < ActiveRecord::Base
attr_accesible :first_name, :last_name
以及 CSV 文件中的以下内容:
First Name,Last Name
John,Doe
Jane,Doe
我想将 CSV 的内容保存到数据库中。我在 Rake 文件中有以下内容:
namespace :migration do
desc "Migrate CSV data"
task :import, [:model, :file_path] => :environment do |t, args|
require 'csv'
model = args.model.constantize
path = args.file_path
CSV.foreach(path, :headers => true,
:converters => :all,
:header_converters => lambda { |h| h.downcase.gsub(' ', '_') }
) do |row|
model.create!(row.to_hash)
end
end
结束
我收到了undefined method 'downcase' for nil:NilClass。如果我排除标头转换器,那么我会得到unknown attribute 'First Name'。将标头从 First Name 转换为 first_name 的正确语法是什么?
【问题讨论】:
-
完全给出错误undefined method 'downcase',这有助于我们知道该方法是在什么对象上调用的。
-
@ArupRakshit 编辑了问题,在
nil:NilClass。 -
只需在
:return_headers => true处添加一个条目。我没有测试,但希望它会工作。如果有帮助,请告诉我,我会向您解释发生的一切。 -
谢谢,给我几分钟看看。
-
好像是这样。将其发布为答案,以便我接受。