ruby-on-rails: стратегии данных заполнения (или загрузка тестовых данных в базу данных разработчика) - PullRequest
3 голосов
/ 05 марта 2010

Я хочу часто очищать и перезагружать свою базу данных разработчиков (Ruby on rails).

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

(у меня уже есть юнит, функциональные и интеграционные тесты, к вашему сведению)

Спасибо

Ответы [ 2 ]

6 голосов
/ 06 марта 2010

Создайте файл seed.yml в каталоге db.Добавьте документ YAML для каждой модели, которую вы хотите создать.Этот документ должен содержать список хэшей.Каждый хэш должен содержать атрибуты модели.

  users:
      -   login: jake
          password: jake123
          password_confirmation: jake123
          first_name: Jake
          last_name: Driver

      -   login: Jane
          password: jane123
          password_confirmation: jane123
          first_name: Jane
          last_name: McCain

  categories:

  products:

В вашем файле seed.rb

seed_file = File.join(Rails.root, 'db', 'seed.yml')
config = YAML::load_file(seed_file)
User.transaction do 
  config.keys.each{ |key| key.classify.constantize.create(config[key]) }
end

Мне проще изменить начальные данные в файле YML.Приложение, которое я создал, развернуто другой командой.Им тоже нравится этот подход.

Для очистки данных у меня есть rake task в каталоге lib \ tasks.Я запускаю грабли как app:flush.

namespace :app do
  desc "Flush all the seed data "
  task :flush => :environment do
    config = YAML::load_file(File.join(Rails.root, 'db', 'seed.yml'))
    User.transaction do 
      config.keys.each{ |table| truncate_table(table)}
    end
  end
end
1 голос
/ 05 марта 2010

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

Проверьте это: http://derekdevries.com/2009/04/13/rails-seed-data/
http://lptf.blogspot.com/2009/09/seed-data-in-rails-234.html

...