从CSV

时间:2017-04-28 21:13:14

标签: ruby-on-rails ruby csv ruby-on-rails-4

我正在尝试在IRB中执行以下操作:

file = CSV.read('branches.csv', headers:true) 
file.each do |branch|
  Branch.create(attributes:branch.to_hash)
end

branches.csv包含一个标题为business_name的标题,该标题应映射到同名Branch的属性,但我看到错误:

ActiveRecord::UnknownAttributeError: unknown attribute 'business_name' for Branch.

奇怪的是,Branch.create(business_name:'test')做得很好,没有任何问题。

更新

enter image description here

enter image description here

我认为这与Excel生成的UTF-8 CSV文本的编码有关,如下面的评论所示。不确定此IRB是否提供任何线索......但我们的标题标题为business_name!= "business_name"

2.3.3 :348 > file = CSV.read('x.csv', headers:true)
#<CSV::Table mode:col_or_row row_count:165>
2.3.3 :349 > puts file.first.to_hash.first.first
business_name
2.3.3 :350 > file = CSV.read('x.csv', headers:true)
#<CSV::Table mode:col_or_row row_count:165>
2.3.3 :351 > puts file.first.to_hash.first.first == "business_name"
false

1 个答案:

答案 0 :(得分:2)

跳过attributes:部分。根本不需要它,因为branch.to_hash已经完全返回您在上一句中描述的格式。

file = CSV.read('branches.csv', headers:true) 
file.each { |branch| Branch.create(branch.to_hash) }