【发布时间】:2011-07-19 22:21:52
【问题描述】:
可以这样做吗?
如果是这样,你怎么做?
注意:FactoryBot 以前被命名为 FactoryGirl
【问题讨论】:
-
db/seeds.rb 应该包含您的站点需要运行的生产特定核心数据。工厂应该只在你的测试中使用,帮助你独立地执行操作。你只是想让你的数据库/种子更短还是什么?
标签: ruby-on-rails factory-bot seed
可以这样做吗?
如果是这样,你怎么做?
注意:FactoryBot 以前被命名为 FactoryGirl
【问题讨论】:
标签: ruby-on-rails factory-bot seed
您需要做的就是将require 'factory_bot_rails' 添加到db/seeds.rb 文件中。这将使您可以访问您的工厂。
注意:Gem 以前称为 FactoryGirlRails
【讨论】:
Josh Clayton,FactoryGirl 的维护者,recommends against using FactoryGirl in your seeds file。他建议改用普通的 ActiveRecord。
【讨论】:
(此答案适用于 rails 3.0.7)
我发现问题在于你如何设置 Gemfile - 你需要按照以下方式做一些事情
gem 'factory_girl'
group :test do
gem 'factory_girl_rails'
end
我们发现factory_girl_rails 存在于:test 环境之外的问题,我们未能深入了解(可能与rails 进行类缓存的方式有关?)
完成后,我喜欢从 lib 中的库中实际加载数据,例如...
require 'factory_girl'
require 'spec/factories/user_factory'
module Seeds
class SampleUsers
def self.run
u = Factory(:user)
end
end
然后在db:seed 中使用
Seeds::SampleUsers.run
【讨论】:
在 db/seeds.rb 中
require 'factory_girl_rails'
10.times do
FactoryGirl.create :user
end
【讨论】:
您可以将以下代码插入到您的 spec_helper.rb 中,它会生成一些您想要的数据实例(在本例中为 yaml 文件中的“产品”):
seeds_file = File.join(Rails.root, 'db', 'seeds.yml')
config = YAML::load_file(seeds_file)
config["products"].each do |product|
FactoryGirl.create(:product, product) if !Product.find_by_name(product['name'])
end
【讨论】:
在 Rails 5.2.6 中,您可以在 db/seeds.rb 文件中创建工厂。在 seeds.rb 文件的顶部添加 include FactoryBot::Syntax::Methods。在该行下方,您可以创建自己的工厂——即user1 = create(:user)。
【讨论】: