如何在Rails中的seed.rb上使用关联生成伪数据

时间:2015-06-03 14:48:06

标签: ruby-on-rails-4

我正在尝试使用其模型关联生成虚假数据。例如,公司(模型)有许多机构(另一个模型)。

 #seeds.rb

 50.times do 
       { FactoryGirl.create(:company) }
       { FactoryGirl.create(:establishment) } 
 end

companies.rb工厂

FactoryGirl.define do
  factory :company do
    sequence(:name) { FFaker::Name.name }
    sequence(:license) { FFaker::SSNMX.imss }
    sequence(:legal_name) { FFaker::Name.name }
    sequence(:billing_address) { FFaker::AddressFR.full_address }
    user
  end
end

establishmentments.rb工厂

FactoryGirl.define do
  factory :establishment do
    sequence(:name) { FFaker::Name.name }
    sequence(:address) { FFaker::AddressFR.full_address }
    company
  end
end

我们的想法是让每家新公司至少拥有五家企业。换句话说,通过使用Company.establishment,它返回一个非空的数组。

我从2009年开始在SO上找到这个旧代码,但它不起作用

100.times do
    Factory(:company, :address => Factory(:address), :employees => [Factory(:employee)])
end

1 个答案:

答案 0 :(得分:1)

我不确定Ffaker模块是什么,但我绝对推荐Faker宝石。 他们有关于如何使用该模块生成虚假数据的精彩文档。

https://github.com/stympy/faker

您甚至可以创建将运行Faker脚本并自动为您创建数据的rake任务。至于一个好的Faker教程(并且一般只使用种子数据)我推荐以下文章:

http://sudharti.github.io/articles/using-faker-and-populator-rails/

另外作为附注,所有种子数据都应该在seeds.rb中。并且您将希望使用create方法并使用键值对来指定您的popluating。例如,如果我填写订单号,我会这样做:

Order.create(order_number: 123456789)

在上面的代码中,特别是FactoryGirl您指定的是符号,而不是其键值对。这只是一个侧面观察。