如何使用FactoryGirl工厂构建开发数据库?

时间:2013-04-03 02:12:52

标签: ruby-on-rails development-environment factory-bot

我已经为测试Rails项目构建了一些精心设计的FactoryGirl工厂定义,为此目的,它们运行良好。

我现在想用脚本(Ruby,Rake,等等......)使用相同的定义,用大量有效,正确关联的记录填充Rails开发数据库。

我确信这是一项常见任务,但无法找到有用的参考资料。

什么是最佳做法?怎么办?

说工厂在spec/factories.rb。接下来是什么?感谢。

更新

仍在苦苦挣扎。将此视为rake任务。

require 'factory_girl'
require 'spec/factories'

namespace :db do
  desc "Fill database with trial data"
  task :populate => :environment do
    Rake::Task['db:reset'].invoke
    50.times do |n|
      # Make a consistent set of related records.
      team = FactoryGirl.create(:team, :completed)
      team.members << FactoryGirl.create(:member)
      FactoryGirl.create(:design, :team => team)
    end
  end
end

唉,这找不到我的factories.rb

rake aborted!
cannot load such file -- spec/factories

项目根目录相关的其他任何地方都需要路径正常工作。什么是秘密握手?

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的,这通常是种子数据的工作。如果您希望仅将这些数据播种到开发数据库中,可以通过执行以下操作来修改seed Rake任务:

namespace :db do
  task :seed => :environment do
    env_seed_file = File.join(Rails.root, 'db', 'seeds', "#{Rails.env}.rb")
    load(env_seed_file) if File.exist?(env_seed_file)
  end
end

这将使您能够为每个环境创建一个文件(即db / seeds / development.rb)。您还可以使用像seedbank这样的gem,它可以为您提供特定于环境的种子文件以及Rails中已有的其他一些内容。

答案 1 :(得分:0)

@Gene 你很接近解决这个难题。我认为你离这个只有一条路。 我没有使用RSpec,路径可能略有不同,但你有了一般的想法。

namespace :db do
  desc "Fill database with trial data"
  task :populate => :environment do
    require 'factory_girl'
    require Rails.root + 'spec/factories'

    Rake::Task['db:reset'].invoke
    Rake::Task['db:seed'].invoke
    50.times do |n|
      # Make a consistent set of related records.
      team = FactoryGirl.create(:team, :completed)
      team.members << FactoryGirl.create(:member)
      FactoryGirl.create(:design, :team => team)
    end
  end
end

我只确定了所需工厂文件的路径,并且在重置后我还添加了rake db:seed。

数据库种子不是在开发时填充数据库,而是使用适当的信息引导新应用程序以便能够正常工作。即。创建管理员用户和默认状态