Заполнение тысяч записей в Rails 3 - PullRequest
1 голос
/ 11 марта 2011

У меня есть несколько таблиц, которые необходимо заполнить при переносе проекта в производство, каждая из этих таблиц имеет несколько тысяч строк.Теперь у меня есть данные, хранящиеся в файле CSV, но использование файла seed.rb кажется громоздким, поскольку данные из моего файла CSV должны быть отформатированы в соответствии с форматом seed.rb.Если бы это было всего несколько строк, это не было бы такой проблемой.Какой самый лучший / самый простой способ загрузить эти данные?

Ответы [ 5 ]

1 голос
/ 11 марта 2011

Я бы, вероятно, использовал небольшой пользовательский скрипт и fast_csv gem , в котором есть хорошие инструменты для быстрого анализа файлов .csv. Затем вы можете сопоставить поля с атрибутами модели.

Я бы реализовал это через TDD в качестве методов модели и использовал бы метод create ActiveRecords для создания экземпляров. Хотя это медленнее, чем прямая запись SQL, безопаснее будет то, что ваши данные будут проходить через все проверки моделей, и вы будете лучше уверены в целостности данных.

Устранение проблем целостности данных при импорте устаревших данных заранее избавит вас от многих проблем позже.

0 голосов
/ 28 октября 2018

Поскольку большинство ответов устарели, этот драгоценный камень поможет вам: https://github.com/zdennis/activerecord-import.

например. если у вас есть коллекция книг, вы можете использовать:

Book.import(books)

Он выполнит только одну инструкцию SQL.

Драгоценный камень также работает с ассоциациями.

0 голосов
/ 06 августа 2012

fast_seeder драгоценный камень поможет вам.Он заполняет базу данных из файлов CSV с использованием нескольких вставок и поддерживает различные адаптеры БД

0 голосов
/ 11 марта 2011

Как и другие, уже упоминалось, что у многих БД есть поддержка массовой загрузки.Но если вы ищете решение в стиле Rails;ar-extensions имеет объемную вставку

Вы также можете оформить заказ ActiveWarehouse

0 голосов
/ 11 марта 2011

Если бы я делал это с использованием MySQL, я бы использовал функцию загрузки данных MySQL, например

загрузка данных в файл '/my/rails/project/data.csv' замена в поля table_name таблицы, заканчивающиеся на ' field_terminator 'строки, оканчивающиеся на' line_terminator ';

Если схемы таблиц меняются не часто, вы можете поместить такой оператор в perl, rubyили сценарий оболочки.

...