我正在将一个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
答案 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