Перезапись столбца id в таблице Rails - PullRequest
0 голосов
/ 15 марта 2012

Я создаю приложение поверх данных, которые у меня уже есть, я получил его от клиента в виде файла .mdb (MS Access). Он состоит из нескольких таблиц T1, T2, ..., TN.

Что я сделал до сих пор: преобразовал таблицы Access в CSV, создал мою таблицу Rails t1 благодаря сценарию, но идентификаторы неверны Что я хочу сделать: создать таблицу Rails для каждой из таблиц от T1 до TN Проблема: я не знаю, как избавиться от столбца идентификатора Rails по умолчанию, то есть автоинкремент

Детали: У меня есть таблица T1 с атрибутами (t1_id, имя, адрес электронной почты, телефон) Скажем, у меня есть три кортежа: (3, Foo, foo@g.com, 0000) (9, Bar, bar@g.com, 1111) (32, Baz, baz@g.com, 2222) Идентификаторы, как они у меня, не являются аккуратной последовательностью 1, 2, 3 - в какой-то момент, должно быть, были удаления. Я знаю, как заполнить мою таблицу Rails с помощью CSV, используя этот скрипт:

require 'csv'
CSV.foreach('./db/seeds/file.csv', headers: true) do |row|
    p row   #p = advanced toString
    p T1.create(id: row['\xEF\xBB\xBFT1ID'], first_name: row['FirstName'], phone: row['Phone'], email: row['Email'])
end

Как вы заметили, мой CSV-заголовок немного странный, у меня там висит несколько символов юникода ... В любом случае, моя модель следующая, взятая из schema.rb:

create_table "t1", :force => true do |t|
  t.string   "first_name"
  t.string   "phone"
  t.string   "email"
  t.datetime "created_at",       :null => false
  t.datetime "updated_at",       :null => false
end

После запуска скрипта моя таблица содержит следующие кортежи с неправильными идентификаторами:
(1, Foo, foo@g.com, 0000) (2, Bar, bar@g.com, 1111) (3, Baz, baz@g.com, 2222)

Как я могу получить правильные идентификаторы? Thaaaanks!

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Столбец: id недоступен для массового назначения. Попробуйте выделить его:

require 'csv'
CSV.foreach('./db/seeds/file.csv', headers: true) do |row|
  p row   #p = advanced toString
  record = T1.new(first_name: row['FirstName'], phone: row['Phone'], email: row['Email'])
  record.id = row['\xEF\xBB\xBFT1ID']
  p record.save
end
0 голосов
/ 15 марта 2012

На основании этого вы должны запустить миграцию Rails

def up
   remove_column :t1, :id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...