2016-09-29 30 views
0

我一直在試圖將devices.csv文件中的數據加載到數據庫中的devices表中。 但是同時命令行中運行執行import.rake時上傳未知屬性錯誤上傳csv文件

rake db:devices RAILS_ENV=production 

以上rake命令,我收到未知的屬性:錯誤。

以下是結果追蹤。

** Invoke db:devices (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:devices 
rake aborted! 
unknown attribute: 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:88:in `block in assign_attributes' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:78:in `each' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/activerecord-3.2.13/lib/active_record/attribute_assignment.rb:78:in `assign_attributes' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/activerecord-3.2.13/lib/active_record/base.rb:498:in `initialize' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/oink-0.10.1/lib/oink/instrumentation/active_record.rb:60:in `initialize' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/activerecord-3.2.13/lib/active_record/persistence.rb:44:in `new' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/activerecord-3.2.13/lib/active_record/persistence.rb:44:in `create' 
/opt/EDDIE/lib/tasks/import.rake:6:in `block (3 levels) in <top (required)>' 
/usr/local/rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/csv.rb:1719:in `each' 
/usr/local/rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/csv.rb:1120:in `block in foreach' 
/usr/local/rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/csv.rb:1266:in `open' 
/usr/local/rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/csv.rb:1119:in `foreach' 
/opt/EDDIE/lib/tasks/import.rake:5:in `block (2 levels) in <top (required)>' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:236:in `call' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:236:in `block in execute' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:231:in `each' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:231:in `execute' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:175:in `block in invoke_with_call_chain' 
/usr/local/rvm/rubies/ruby-2.0.0-p648/lib/ruby/2.0.0/monitor.rb:211:in `mon_synchronize' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:168:in `invoke_with_call_chain' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/task.rb:161:in `invoke' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:149:in `invoke_task' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:106:in `block (2 levels) in top_level' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:106:in `each' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:106:in `block in top_level' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:115:in `run_with_threads' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:100:in `top_level' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:78:in `block in run' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:165:in `standard_exception_handling' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/lib/rake/application.rb:75:in `run' 
/usr/local/rvm/gems/ruby-2.0.0-p648/gems/rake-10.1.1/bin/rake:33:in `<top (required)>' 
/usr/local/rvm/gems/ruby-2.0.0-p648/bin/rake:23:in `load' 
/usr/local/rvm/gems/ruby-2.0.0-p648/bin/rake:23:in `<main>' 
/usr/local/rvm/gems/ruby-2.0.0-p648/bin/ruby_executable_hooks:15:in `eval' 
/usr/local/rvm/gems/ruby-2.0.0-p648/bin/ruby_executable_hooks:15:in `<main>' 
Tasks: TOP => db:devices 

這是我在lib/tasks文件夾中的rake文件。

require 'csv' 
namespace :db do 
    desc "Import devices from csv file" 
    task :devices => [:environment] do 
     CSV.foreach('devices.csv', :headers => true, :encoding => 'ISO-8859-1:UTF-8') do |row| 
     Device.create(row.to_hash) 
    end 
    end 
end 

任何人都可以幫助如何忽略此錯誤並將數據加載到數據庫?

+0

得到它的工作? –

+0

感謝您的協助。我能夠找出錯誤。實際上,我的csv文件包含一個額外的列,這在DB中的devices表中不存在。刪除csv文件中的那一列對我很有用。 – Pawan

+0

我用下一個提示更新了答案。 –

回答

0

我認爲你的頭文件中有一些內容與列名不匹配。

當像這樣導入數據時,如果您不想打擾將每個csv列映射到Model屬性以保證它可以工作,那麼您可以忽略沒有匹配頭的列。使用

您的例子,它可能是這樣的:

task :devices => [:environment] do 
     CSV.foreach('devices.csv', :headers => true, :encoding => 'ISO-8859-1:UTF-8') do |row| 
     params = row.to_hash.with_indifferent_access.select{ |x| Device.attribute_names.index(x)} 
     Device.create(params) 
    end 
    end