2011-11-29 57 views
0

这是我正在尝试做的事情。我有几个对象,但为了简单起见,我会保持两个。这两个对象有多对一的关系。例如:检查Factory-Girl中的现有记录

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 

现在我想知道的是,如果我创建栏的一个实例,(这将创造FOO的实例),并测试完成/失败/任何记录保留在数据库中(由设计)。现在,如果我再次运行相同的测试,我会得到一个SQL错误,说主键已经存在于数据库中。我想知道的是,我该如何检查foo中是否已经存在一个foo实例,如果是这样,跳过尝试创建它并继续创建bar?这对你来说够暗吗? :)

回答

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