无法批量分配受保护的属性错误 - 无法导入数据

时间:2013-08-30 06:32:23

标签: ruby-on-rails ruby-on-rails-3

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

2 个答案:

答案 0 :(得分:2)

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

您的csv包含First NameLast NameEmail,它们与: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