Activerecord 正在检查Factory Girl中的现有记录
以下是我试图做的。我有几个对象,但为了简单起见,我将把它保留为两个。这两个对象具有多对一关系。例如:Activerecord 正在检查Factory Girl中的现有记录,activerecord,factory-bot,rubymine,Activerecord,Factory Bot,Rubymine,以下是我试图做的。我有几个对象,但为了简单起见,我将把它保留为两个。这两个对象具有多对一关系。例如: class Foo < ActiveRecord::Base has_many :bars set_primary_key :BLAH end class Bar < ActiveRecord::Base belongs_to :foo end Factory.define :foo blahblahblah end Factory.define
class Foo < ActiveRecord::Base
has_many :bars
set_primary_key :BLAH
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
Factory.define :foo
blahblahblah
end
Factory.define :bar do |t|
t.association :foo
end
class Foo
现在我想知道的是,我是否创建了一个bar实例(这将创建一个foo实例),并且测试完成/失败/数据库中保留的任何记录(通过设计)。现在,如果我再次运行相同的测试,我会得到一个SQL错误,表示数据库中已经存在主键。我想知道的是,如何检查数据库中是否已经存在foo实例,如果已经存在,则跳过尝试创建它并继续创建bar?这对你来说够阴暗吗?:) 我知道这可能不是最优雅的解决方案,但这正是我所做的,它似乎在做我需要的事情
#defined in foo
def existing_foo(foo_id)
if(Foo.find_by_FOOID(foo_id) == NIL)
Factory(:foo, :foo_id => foo_id)
return :foo_id
end
Foo.find_by_FOOID(foo_id).FOOID
end
#defined in bar
Factory.define bar do |record|
record.sequence(:foo_id){|n|existing_foo("blah#{n}")}
end