Создайте файл seed.rb, чтобы разрешить текущее создание и обновление данных. Вы не ограничены только запуском семенного файла только один раз, и если вы считаете, что он используется только для первоначального развертывания, вы пропустите гибкость, которую он может предложить при настройке справочных данных.
Файл семена просто рубин, так что вы можете сделать что-то вроде:
user = User.find_or_initialize_by(email: '[email protected]')
user.name = 'Bob'
user.password = 'secret'
user.role = 'manager'
user.save!
Это создаст новые данные, если он не существует или обновить данные, если он находит некоторые.
Если вы правильно структурируете файл семян, вы также можете создавать и обновлять зависимые объекты.
Я рекомендую использовать функцию bang save, чтобы исключить исключения в том случае, если объект не может быть сохранен. Это самый простой способ отладки семян.
Я использую seedbank gem, чтобы предоставить больше структуры для моих данных о семени, включая данные настройки для каждой среды, зависимые семена и многое другое.
Я не рекомендую использовать миграции для данных семян. Существует недостаток гибкости (как вы ориентируете данные семян только на одну среду, например), и нет реального способа создания повторно используемого набора данных, который может быть запущен в любое время для обновления конкретной среды. У вас также будет набор миграций, которые не имеют ссылки на вашу схему, и вам придется создавать новые миграции каждый раз, когда вы хотите генерировать новые или изменять текущие данные.
Вы можете запустить 'seed.rb' столько раз, сколько хотите, это обычный файл сценария ruby ... Хотя имейте в виду, что если вы запустили его раньше и снова запустите его, вы получите дубликаты. В вашем случае, если вы хотите просто добавить строку данных, то «рейк-задача» или использовать бегун скрипта http://guides.rubyonrails.org/command_line.html#rails-runner. Я не думаю, что миграция подходит для это все же. – j03w