电子表格没有保存到Rails数据库

时间:2017-01-29 17:19:38

标签: ruby-on-rails postgresql import-from-excel roo-gem

我设法使用Roo gem通过我的Rails 5应用程序获取电子表格,但一旦完成该过程,它似乎无法保存到数据库。

这是我的代码:

require 'roo'

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

xlsx.each_row_streaming(offset: 1) do |row|

Location.find_or_create_by(ukprn: row[0]&.value, accomurl: row[1]&.value, instbeds: row[3]&.value, instlower: row[4]&.value, instupper: row[5]&.value, locid: row[6]&.value, name: row[7]&.value, lat: row[9]&.value, long: row[10]&.value, locukprn: row[11]&.value, loccountry: row[12]&.value, privatelower: row[13]&.value, privateupper: row[14]&.value, suurl: row[15]&.value)

end

这会使用正确的属性遍历每一行,并给出以下结果:

Location Load (0.8ms)  SELECT  "locations".* FROM "locations" WHERE "locations"."ukprn" = $1 AND "locations"."accomurl" = $2 AND "locations"."instbeds" = $3 AND "locations"."instlower" = $4 AND "locations"."instupper" = $5 AND "locations"."locid" = $6 AND "locations"."name" = $7 AND "locations"."lat" = $8 AND "locations"."long" = $9 AND "locations"."locukprn" = $10 AND "locations"."loccountry" = $11 AND "locations"."privatelower" = $12 AND "locations"."privateupper" = $13 AND "locations"."suurl" = $14 LIMIT $15  [["ukprn", "99999998"], ["accomurl", "http://www2.hull.ac.uk/student/accommodation-new/accommodationhull/first-year-students.aspx"], ["instbeds", 3033], ["instlower", 3500], ["instupper", "5200"], ["locid", "HC"], ["name", "The University of Hull"], ["lat", 53.76964], ["long", -0.367165], ["locukprn", 10007149], ["loccountry", "XF"], ["privatelower", 3100], ["privateupper", "3800"], ["suurl", "http://www.hullstudent.com/"], ["LIMIT", 1]]
   (0.4ms)  BEGIN
   (0.3ms)  ROLLBACK

并继续遍历所有行,直到结束行:

  Location Load (0.6ms)  SELECT  "locations".* FROM "locations" WHERE "locations"."ukprn" = $1 AND "locations"."accomurl" = $2 AND "locations"."instbeds" = $3 AND "locations"."instlower" = $4 AND "locations"."instupper" = $5 AND "locations"."locid" = $6 AND "locations"."name" = $7 AND "locations"."lat" = $8 AND "locations"."long" = $9 AND "locations"."locukprn" = $10 AND "locations"."loccountry" = $11 AND "locations"."privatelower" = $12 AND "locations"."privateupper" = $13 AND "locations"."suurl" = $14 LIMIT $15  [["ukprn", "99999999"], ["accomurl", "http://www.bsms.ac.uk/undergraduate/our-course"], ["instbeds", 5720], ["instlower", 4785], ["instupper", "6011"], ["locid", "KF"], ["name", "Falmer"], ["lat", 50.860268], ["long", -0.085662], ["locukprn", 99999999], ["loccountry", "XF"], ["privatelower", 4977], ["privateupper", "5756"], ["suurl", "http://www.bsms.ac.uk/undergraduate/campus-life/student-life/"], ["LIMIT", 1]]
   (0.8ms)  BEGIN
   (0.4ms)  ROLLBACK
 => nil 

无论出于何种原因,这都不会将数据提交到postgres数据库。我不确定为什么会这样。

如果我将代码更改为Location.create!(ukprn: row[0]&.value, accomurl: row[1]&.value, instbeds: row[3]&.value, instlower: row[4]&.value, instupper: row[5]&.value, locid: row[6]&.value, name: row[7]&.value, lat: row[9]&.value, long: row[10]&.value, locukprn: row[11]&.value, loccountry: row[12]&.value, privatelower: row[13]&.value, privateupper: row[14]&.value, suurl: row[15]&.value),则会出现以下错误:

(485.6ms)  BEGIN
   (156.0ms)  ROLLBACK
ActiveRecord::RecordInvalid: Validation failed: Institute must exist
    from /home/dave/.rvm/gems/ruby-2.3.3/gems/activerecord-5.0.1/lib/active_record/validations.rb:78:in `raise_validation_error'

其中学院是参考(外键)。任何建议将不胜感激。

0 个答案:

没有答案