#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