Лучшая практика при использовании seed.rb

#ruby-on-rails #ruby-on-rails-3 #seed

#ruby-on-rails #ruby-on-rails-3 #начальный

Вопрос:

У меня возникли некоторые трудности с пониманием того, как использовать seed.rb скрипт в rails.

До сих пор я использовал его для заполнения моей базы данных при каждом развертывании моего приложения.

Вот так.

seed.rb

 ["Video", "Tv"].each do |thing|
  Category.create(name: thing)
end
  

category.rb

 class Category < ActiveRecord::Base
  validates_uniqueness_of :name
end
  

Теперь скрипт можно запускать при каждом развертывании или извлечении.
Теперь любой член команды разработчиков может добавить свою собственную категорию, не беспокоясь о дублировании.

Вот так.

Человек один

  • Добавление Table категории в seed.rb .
  • Фиксируйте и нажимайте на master.

Человек два

  • Извлеките мастер.
  • Запустите rake db:migrate и rake db:seed , чтобы убедиться, что локальная база данных обновлена.
  • Разверните приложение на рабочем сервере. rake db:seed выполняется на сервере для обеспечения актуальной базы данных.

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

Ответ №1:

Я бы рекомендовал написать ваше начальное значение так, чтобы его можно было запускать более одного раза, не пытаясь создавать повторяющиеся категории…

 ["Video", "Tv"].each do |thing|
  Category.find_or_create_by_name(thing)
end
  

Комментарии:

1. Использование одного поля было просто примером. Я мог бы, например, иметь active файл в таблице. active Поле может измениться во время выполнения, что означает, что выполнение Category.find_or_create_by_name_and_active(name, active) может привести к дублированию.

2. Если уникальным атрибутом является name , то вы делаете… ["Video", "Tv"].each do |name| category = Category.find_or_initialize_by_name(name) category.update_attributes(...) end