将CSV导入Rails应用程序时,未知属性“ id”

时间:2019-09-23 16:05:16

标签: ruby-on-rails ruby csv psql

我正在将一个csv导入我的应用程序,并且遇到路由错误“ TableName的未知属性'id'”

到目前为止,我知道这应该是由于我的csv的列与我的表不匹配,但是事实并非如此。我很确定这与.csv中的列名是“ id”有关,因为这可能是保留字,但是我尝试在id: false中设置create_table,但仍然错误。

我仍然掌握着红宝石的精髓,因此我们将不胜感激。谢谢!

模式:

class CreateContacts < ActiveRecord::Migration[5.2]
  def change
    create_table :contacts do |t|
      t.integer :id
      t.string :first_name
      t.string :last_name
      t.string :company
      t.string :email
      t.string :address1
      t.string :address2
      t.string :city
      t.string :state_long
      t.string :state
      t.string :phone

      t.timestamps
    end
  end
end

控制器:

require 'csv'

class ContactController < ApplicationController
  def index
  end

  CSV.foreach('app/data/contact_data.csv', :headers => true) do |row|
    Contact.create!(row.to_hash)
  end
end

2 个答案:

答案 0 :(得分:0)

id受attr_protected的保护,这就是为什么您不能在创建时手动设置它的原因,可以这样设置

Contact.create!(row.to_hash, without_protection: true)

,但是在将without_protection设置为true时要小心。您可以详细了解here

答案 1 :(得分:0)

在Rails中,id是自动生成的,因此您无需在迁移文件中指定ID。您可以在迁移文件中删除以下行:

t.integer :id