Как создавать светильники на основе моей базы данных разработки?
Я ленив, и с тех пор, как у моей производственной базы данных есть данные, которые я мог бы использовать для тестирования на предстоящей разработке, мне было интересно, существуют ли какие-либо простые методы создания светильников.
Использование Rails 3 на 1.8.7
Ответы
Ответ 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