Как (и нужно ли) заполнять приложение рельсов исходными данными - PullRequest
61 голосов
/ 15 сентября 2008

У меня есть приложение rails, в котором пользователи должны войти в систему. Поэтому для того, чтобы приложение можно было использовать, в системе должен быть один начальный пользователь, чтобы первый пользователь мог войти в систему (затем они могут создать последующие пользователей). До сих пор я использовал миграцию для добавления специального пользователя в базу данных.

Задав этот вопрос , мне кажется, что я должен использовать db: schema: load, а не запускать миграции, для установки новых баз данных на новых машинах разработки. К сожалению, это не относится к миграциям, которые вставляют данные, только к тем, которые устанавливают таблицы, ключи и т. Д.

Мой вопрос: как лучше всего справиться с этой ситуацией:

  1. Есть ли способ получить d: s: l для включения миграций с вставкой данных?
  2. Должен ли я вообще не использовать миграции для вставки данных?
  3. Не следует ли мне вообще предварительно заполнять базу данных данными? Должен ли я обновить код приложения, чтобы он обрабатывал случай, когда нет изящных пользователей, и позволял создавать первоначальную учетную запись пользователя вживую из приложения?
  4. Есть ли другие варианты? :)

Ответы [ 13 ]

2 голосов
/ 15 сентября 2008

Для пользователей и групп вопрос о ранее существующих пользователях должен быть определен с учетом потребностей приложения, а не непредвиденных обстоятельств программирования. Возможно, ваше приложение требует администратора; затем предварительно заселить. Или, возможно, нет - тогда добавьте код, чтобы изящно запросить настройку пользователя во время запуска приложения.

По более общему вопросу ясно, что многие Rails-приложения могут выиграть от предварительно заполненной даты. Например, заявка на хранение адреса в США также может содержать все штаты и их сокращения. В этих случаях миграция - ваш друг, я считаю.

2 голосов
/ 15 сентября 2008

Я бы держал это в миграции. Несмотря на то, что рекомендуется использовать схему для начальных настроек, причина в том, что она быстрее, что позволяет избежать проблем. Одной дополнительной миграции данных должно быть достаточно.

Вы также можете добавить данные в файл схемы, так как это тот же формат, что и для миграций. Вы бы просто потеряли функцию автогенерации.

1 голос
/ 21 января 2014

Некоторые ответы устарели. Начиная с Rails 2.3.4, в db/seed.rb:

доступна простая функция под названием Seed.
#db/seed.rb
User.create( :name => 'default', :password => 'password' )
Comment.create( :title => 'Title', :body => 'First post!' )

Он предоставляет новую задачу rake, которую вы можете использовать после загрузки для загрузки данных:

rake db:seed

Seed.rb - классический файл Ruby, вы можете использовать любую классическую структуру данных (массив, хэши и т. Д.) И итераторы для добавления ваших данных:

["bryan", "bill", "tom"].each do |name|
  User.create(:name => name, :password => "password")
end

Если вы хотите добавить данные с символами UTF-8 (очень часто встречаются на французском, испанском, немецком и т. Д.), Не забудьте добавить в начале файла:

# ruby encoding: utf-8

Этот Railscast - хорошее введение: http://railscasts.com/episodes/179-seed-data

...