0

我有一个简单的 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
4

2 回答 2

2

您只attr_accessible定义了:email, :fname, :lname

您的 csv 包含First Name, Last NameEmail它们与:email, :fname,不同:lname

因此,您需要添加以下内容以使其工作:

attr_accessible :"First Name", :"Last Name", :Email

更新:

虽然这个解决方案有效,但它看起来并不漂亮!

关于你的第二条评论:

顺便说一句,现在,我必须将第一行保留为 fname,lname,email,无论如何用户可以上传文件 - FirstName,LastName,Email 可以映射到 fname,lname,email

为此,@monangik 提出的解决方案是完美的!

于 2013-08-30T06:35:07.667 回答
2

试试这个 stackoverflow 答案。这可能会解决您的问题。

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
于 2013-08-30T07:13:06.223 回答