Как заполнить справочные таблицы в рельсах - PullRequest
0 голосов
/ 16 ноября 2018

Я ищу лучший способ заполнить справочные таблицы в моем приложении rails - для разработки, тестирования и производства (самый важный, конечно, для производства). (В идеале, я думаю, что использование по существу одной и той же процедуры для всех трех будет лучшим или, по крайней мере, самым простым решением; но я подозреваю, что это может быть не практичным или мудрым.)

Например, я собираюсь создать таблицу для базовой информации о запасах, которая обычно не изменяется (поля: символ, имя, сектор, отрасль). Мне нужно, чтобы эта таблица была загружена (например, через текстовый файл, содержащий эти данные для всех акций США) при первом запуске приложения в производстве, а также при тестировании и разработке, когда таблица еще не загружена. (В случае, если это имеет значение для моего вопроса, весьма вероятно, что эта таблица будет обновлена ​​по мере появления новых данных [например, для компании, которая только что стала публичной].)

Я был удивлен, что я не нашел этот вопрос уже в stackoverflow. Это может быть там, но это невозможно найти с помощью поисков, которые я пробовал. Я нашел пару похожих вопросов (например, данные теста на посев), но не достаточно близко, чтобы предоставить то, что я ищу. Я даже не мог найти многое через поиск в Google! Я, однако, нашел это: https://codingitwrong.com/2016/07/29/how-to-seed-and-migrate-rails-data.html В частности, автор говорит: «Файл seed обычно используется для обоих этих [справочных данных по сравнению с образцами данных], но это затрудняет настройку исходных данных в рабочей среде. Руководства Rails не дают четкого представления о том, какие из эти семена файл для ... Это может быть полезно для разделения двух. Thoughtbot рекомендует использовать файл seed для справочных данных и настроить отдельную задачу Rake для образцов данных. "

(Примечание. Исходя из приведенной выше цитаты, я гуглил «rails, зачем нужен файл seed.rb?» И нашел этот вопрос: Какова функция файла seed.rb?, который рекомендует использовать seed.rb для справочных данных. Поэтому, возможно, лучше использовать seed.rb. Если это так, то это означает, что seed.rb следует использовать для справочных данных, а не для настройки теста.)

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Создать CSV со всеми необходимыми данными. Затем сохраните CSV в папке db.

# db/seeds.rb

require 'csv'

csv_text = File.read(Rails.root.join('db','file_name.csv'))

Затем переберите данные CSV с кодом ниже:

csv = CSV.parse(csv_text, :headers => true)
csv.each do |row|
  puts row.to_hash
  # each row will be a hash object. Use the data in this hash object to create records in the DB.
end

Убедитесь, что файл CSV имеет заголовки в первой строке.

Теперь вы можете использовать rails db:seed для импорта данных файла CSV в вашу БД.

0 голосов
/ 16 ноября 2018

Из вашего вопроса я понимаю, что вам нужен способ инициализации таблицы в первый раз.

Вы можете создать файл Excel из записей этой таблицы, а затем импортировать этот файл Excel в свое приложение и создать записи для каждой записи в файле Excel.

Это видео Railscasts охватывает основное использование драгоценного камня с именем roo , который предоставляет эту функциональность.

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