我有一个简单的csv导入功能,我收到此错误
无法批量指定受保护的属性:名字姓氏电子邮件
我很惊讶这种情况正在发生,因为我对这些字段都有attr_accessible。这是我的info.rb模型代码
attr_accessible :email, :fname, :lname
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Contact.create! row.to_hash
end
end
我的CSV是test.csv(导出工作正常,只导入数据导致此错误)
First Name Last Name Email
John Smith john@example.com
Janen Smith jane@example.com
答案 0 :(得分:2)
您只为attr_accessible
,:email
,:fname
定义了:lname
。
您的csv包含First Name
,Last Name
,Email
,它们与:email
,:fname
,:lname
不同。
因此,您需要添加以下内容才能使其正常工作:
attr_accessible :"First Name", :"Last Name", :Email
更新:
虽然这个解决方案有效,但看起来并不漂亮!
关于你的第二条评论:
顺便说一句,现在,我必须保留第一行为fname,lname,email,无论如何用户可以上传文件 - FirstName,LastName,Email可以映射到fname,lname,email
为此,@ monangik提出的解决方案非常完美!
答案 1 :(得分:2)
试试This stackoverflow answer。这可能会解决您的问题。
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Contact.create!( :fname => row[0],
:lname => row[1],
:email => row[2]
)
end
end