在工厂女孩/工厂机器人中,我如何为第二个查找表提供条件种子



>我有两个类PublisherLevel 和 Publisher。如果我们创建发布商,则发布商级别计数应等于 14,即不同发布商级别类型的计数。在我们的数据库中,我们有一个外键约束。 这只是一个查找表。我想做这样的事情:

FactoryGirl.define do
if PublisherLevel.count == 0 
puts "you have 0 publisher_levels and should seed it"
seed_publisher_levels
end
factory :company do
name { Faker::Company.name }
display_name "Sample Company"
publisher_level 
end
end

但是第一个 if 语句不会被调用。我已经看到这个在 Rails 中使用具有独特约束的关联factory_girl。收到重复错误,但已有 8 年历史,并怀疑有一个更优雅的解决方案。 这样做的规范方法是什么?

似乎你想要种子数据。您可以创建自己的种子类来缓存必要的数据:

class Seeds
def [](name)
all.fetch(name)
end
def register(name, object)
all[name.to_sym] = object
end
def setup
register :publisher_level_1, FactoryGirl.create(:publisher_level, :some_trait)
register :publisher_level_2, FactoryGirl.create(:publisher_level, :some_other_trait)
end
private
def all
@all ||= {}
end
end

然后在您的test_helper.rb中,致电:

require 'path/to/seeds.rb'
Seeds.setup

最后,在您的工厂中参考它:

factory :company do
publisher_level { Seeds[:publisher_level_1] }
end

此代码只是用法的一个例子,您必须对其进行调整以使其根据您的需要运行。

最新更新