2017-01-24 106 views
2

我正在從Rails應用程序的電子表格中提取大量數據,但我正在通過Rails控制檯進行提取。將數據從Excel電子表格提取到Ruby數據庫中

我在我的數據庫中有一個名爲instititutes的表,當前有大約170條記錄。我在電子表格中找到了具有c.1000記錄的好得多的數據,並希望將其導入到我的數據庫中,但跳過任何已匹配的記錄。

我認爲使用find_or_create_by方法是最好的舉措。該電子表格具有UKPRNNAME作爲標題,並且該表格具有ukprnname作爲相應列(以及其他列)。

使用Roo的寶石,我得到這個至今:

require 'roo' 

xlsx = Roo::Spreadsheet.open(File.expand_path('../Downloads/UKPRN.xlsx')) 
xlsx.default_sheet = xlsx.sheets.last 
header = xlsx.row(1) 
xlsx.each_row do |row| 
    row = Institute.find_or_create_by(UKPRN: ukprn , NAME: name) 
end 

這是給錯誤NameError: unitialized constant UKPRN。我仍然把我的頭回到紅寶石,所以任何幫助,將不勝感激。

我使用Ruby 2.2.3和Rails 5.0.1

編輯:

p row顯示:

["UKPRN", "NAME"] 
[10000291, "Anglia Ruskin University"] 
[10000385, "The Arts University Bournemouth"] 
[10000571, "Bath Spa University"] 
[10000712, "University College Birmingham"] 
[10000824, "Bournemouth University"] 
[10000886, "The University of Brighton"] 
[10000961, "Brunel University London"] 
...etc 
+0

什麼'p行'輸出內'each_ row'?沒有'row = Institute ...' –

回答

0

表有ukprnname爲各列,所以find_or_create應看起來像:

Institute.find_or_create_by(ukprn: ukprn , name: name) 

現在您只需要從row初始化ukprnname

require 'roo' 

xlsx = Roo::Excelx.new(File.expand_path('../Downloads/UKPRN.xlsx')) 

xlsx.each_row_streaming(offset: 1) do |row| 
    Institute.find_or_create_by(ukprn: row[0].value, name: row[1].value) 
end 

要執行這個代碼,可以:

  • 把它放在db/seeds.rb和執行rake db:seed
  • 把它放在script.rb和運行rails runner script.rb
  • 它複製粘貼到控制檯(並不推薦)
+0

道歉,但是從控制檯做到這一點的最好方法是什麼? –

相關問題