Лучший способ импортировать данные в мое новое приложение rails? - PullRequest
4 голосов
/ 10 марта 2012

Привет! У меня есть база данных sqlite3, заполненная данными из моей предыдущей версии веб-приложения, которые не были записаны в рельсы. Сейчас я переписываю веб-приложение с нуля. Но я бы хотел использовать данные из моего предыдущего приложения в новом приложении rails. Каков наилучший способ сделать это?

Это то, что я пробовал до сих пор, и это не очень хорошо работало: 1) Я создал новое приложение rails

2) заменил мою базу данных sqlite3 в новом приложении на базу данных sqlite3 из старого приложения

3) Создана модель с той же схемой, что и у старой БД.

4) изменил файл databse.yml с обновленными данными файла БД

5) В моей модели добавлен метод «Установить_соединение»

6) Таким образом, я мог заставить его показать мне все детали старой базы данных в моем браузере @ "index.html"

7) Однако я столкнулся с проблемами при желании вставить / отредактировать записи в БД. Поскольку в БД не было столбца первичного ключа для каждой строки, он не работал.

8) Поэтому я попытался выполнить миграцию, чтобы добавить столбец с первичным ключом. Не сработало

9) неожиданно в приложении появилась новая база данных development.sqlite3, и она пыталась добавить первичный ключ в NEW DB.

10) Итак, я просто удалил новую БД, которая появилась, и после этого приложение не работало

11) Теперь я хочу начать с нуля и вот мой вопрос: «Какой лучший способ импортировать данные из предыдущего приложения, не относящегося к rails (в формате sqlite3 DB), в новое приложение rails»

1 Ответ

5 голосов
/ 10 марта 2012

Вы хотите работать с 2 базами данных, старой и новой. Итак, ваш database.yml должен иметь 2 соединения. Одна должна быть вашей обычной связью, называемой разработкой или производством, а другая должна называться наследием. Заполните их различную информацию о соединении. По умолчанию ваши модели ActiveRecord будут использовать те, которые не называются устаревшими.

Создайте модель с именем LegacyBase. В модель положить establish_connection "legacy". Теперь создайте каталог в app / models / legacy. Поместите все модели, представляющие данные из старой БД в этот каталог. Все эти модели должны выходить из LegacyBase. Это будет означать, что они все читают из старой БД.

Создайте свои новые модели. Вы хотите, чтобы у них был столбец первичного ключа? Если нет, посмотрите этот ответ. Создать таблицу базы данных ActiveRecord со столбцом no: id? . По умолчанию они будут иметь столбец идентификатора, и я рекомендую оставить его таким.

Для каждой из унаследованных моделей напишите метод to_model. В этом методе напишите код, который создает новый объект, и заполните его старыми данными и сохраните его. Примерно так:

class OldUser < LegacyBase

    establish_connection "legacy"

    def to_model
        User.create!(self.attributes)
    end
end

Вы можете использовать любую логику, которая необходима, чтобы старые данные соответствовали вашему новому приложению. Вызовите этот метод для всех старых записей, например OldUser.all.map(&:to_model).

Сделайте это для всех таблиц, которые вы хотите переместить.

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