Подтвердить что ты не робот

Как создавать светильники на основе моей базы данных разработки?

Я ленив, и с тех пор, как у моей производственной базы данных есть данные, которые я мог бы использовать для тестирования на предстоящей разработке, мне было интересно, существуют ли какие-либо простые методы создания светильников.

Использование Rails 3 на 1.8.7

4b9b3361

Ответ 1

Вы действительно можете это сделать Google. "рельсы создают привязку из базы данных". Первый удар: http://snippets.dzone.com/posts/show/2525. Но вы будете генерировать то, что, как я думаю, будет хрупким. Подумайте о замене арматуры. Как Fixjour, Factory Девушка, или Machinist. Они помогут вам подумать о том, какие крайние случаи вы бросаете в свой код. Просто мысль.

Ответ 2

Вопрос старен, но по-прежнему кажется актуальным: да, есть простой способ создать приборы из вашей базы данных разработки:

class ActiveRecord::Base
  def dump_fixture
    fixture_file = "#{Rails.root}/test/fixtures/#{self.class.table_name}.yml"
    File.open(fixture_file, "a+") do |f|
      f.puts({ "#{self.class.table_name.singularize}_#{id}" => attributes }.
        to_yaml.sub!(/---\s?/, "\n"))
    end
  end
end

Поместите это в файл в config/initializers - теперь вы можете сбросить любой объект ActiveRecord в консоли Rails, и он будет автоматически добавлен в конец соответствующего файла привязки:

User.first.dump_fixture добавляет данные привязки к test/fixtures/users.yml.

Ответ 3

Если вы создаете скрипт для запуска под rails runner вы можете использовать следующий подход:

File.open("#{Rails.root}/spec/fixtures/documents.yml", 'w') do |file|
  file.write Document.all.to_a.map(&:attributes).to_yaml
end

Вы можете создать столько блоков, сколько захотите, или, если вы хотите перейти к полной базе данных, вы можете попробовать:

models = defined?(AppicationRecord) ? ApplicationRecord.decendants : ActiveRecord::Base.descendants
models.each do |model|
  model_name = model.name.pluralize.underscore
  File.open("#{Rails.root}/spec/fixtures/#{model_name}.yml", 'w') do |file|
    file.write model.all.to_a.map(&:attributes).to_yaml
  end
end