2011-11-29 56 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