将CSV导入Rails时如何解决“未知属性错误”?

时间:2019-12-29 01:55:11

标签: ruby-on-rails smartercsv

我正在尝试将csv中的数据上传到我的数据库中,并且一直说unknown attribute 'day' for MidSemesterTable.,而表中存在“ day”列。

MidSemesterTable架构表示

create_table "mid_semester_tables", force: :cascade do |t|
    t.string "day", default: "", null: false
    t.string "building", default: "", null: false
    t.string "s1", default: "", null: false
    t.string "s2", default: "", null: false
    t.string "s3", default: "", null: false
    t.string "s4", default: "", null: false
    t.string "s5", default: "", null: false
    t.string "s6", default: "", null: false
    t.string "s7", default: "", null: false
    t.string "s8", default: "", null: false
    t.string "s9", default: "", null: false
    t.string "s10", default: "", null: false
    t.string "s11", default: "", null: false
  end

控制器

 def def new
        @csv = MidSemesterTable.new

        @table = MidSemesterTable.all
    end

    def import
        MidSemesterTable.import(params[:file])
        redirect_to new_mid_semester_table_path
    end

模型

    def self.import(file)
        CSV.foreach(file.path, headers: true) do |r|
            print r.to_h
            MidSemesterTable.create! r.to_h
        end
    end

正在上传CSV

day,building,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11
MONDAY,CHAPEL,TMC144,EDS411,GST211,GST211,CST111,CST111,,,CIT111,CIT111,

从答案herehere来看,他们正在谈论命名问题并确保标头和数据库行名一致。在我的情况下,他们会怎么做。

请我错过了什么?

1 个答案:

答案 0 :(得分:0)

如果将来有用户,我会发布此答案。

如果像我一样,您使用excel编辑CSV。确保编码设置为UTF-8,而不是其他任何设置。要特别小心,因为有一个名为UTF-8 with BOM的编码。注意不要忽略“ with BOM”。如果不这样做,则标题会出现问题,并将CSV保存到数据库中。