Лучший способ импортировать данные в новое приложение rails?

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

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

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

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

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

5) В моей модели добавлен метод "установить_соединение"

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

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

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

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

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

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

1 ответ

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

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

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

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

class OldUser < LegacyBase establish_connection "legacy" def to_model User.create!(self.attributes) end
end

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

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

licensed under cc by-sa 3.0 with attribution.