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