2011-11-29 6 views
0

Voici ce que je tente de faire. J'ai plusieurs objets mais pour la simplicité, je vais le garder à deux. Les deux objets ont une relation plusieurs à un. Par exemple:Recherche d'un enregistrement existant dans 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 

Maintenant ce que je veux savoir est si je crée une instance de bar, (qui va créer une instance de foo), et la fin du test/échoue/quelles que soient les enregistrements restent dans la base de données (intentionnellement). Maintenant, si je réexécutais le même test, j'obtiendrais une erreur SQL indiquant que la clé primaire existe déjà dans la base de données. Ce que je veux savoir, c'est comment puis-je vérifier si une instance de foo existe déjà dans la base de données et, si oui, sauter pour essayer de le créer et continuer avec la création de la barre? Est-ce assez obscur pour vous? :)

Répondre

0

Je sais qu'il ne peut pas être la solution la plus élégante, mais ce que je travaille sur et il semble faire ce que j'ai besoin pour ...

#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 
Questions connexes