这是我正在尝试做的事情。我有几个对象,但为了简单起见,我会把它保持为两个。这两个对象具有多对一关系。例如:
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?这对你来说是不是很模糊? :)
答案 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