检查Factory-Girl中的现有记录

时间:2011-11-29 21:47:28

标签: 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 :bar do |t|
   t.association :foo
end

现在我想知道的是,如果我创建一个bar实例(它将创建一个foo实例),并且测试结束/失败/无论记录保留在数据库中(按设计)。现在如果我再次运行相同的测试,我会得到一个SQL错误,说主键已经存在于db中。我想知道的是我如何检查数据库中是否已存在foo实例,如果是这样,请跳过尝试创建它并继续创建bar?这对你来说是不是很模糊? :)

1 个答案:

答案 0 :(得分:0)

我知道它可能不是最优雅的解决方案,但这就是我的工作,似乎正在做我需要的......

#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