Vérification d'un enregistrement existant dans l'usine-Girl
-
25-10-2019 - |
Question
Voici ce que je tente de faire. J'ai plusieurs objets, mais pour des raisons de simplicité, je vais le garder à deux. Les deux objets ont une relation plusieurs à un. Par exemple:
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 (par la conception). Maintenant, si je courais le même test à nouveau je recevrais une erreur SQL disant que la clé primaire existe déjà dans la db. Ce que je veux savoir est comment puis-je vérifier si une instance de foo existe déjà dans la db et si oui, passez à essayer de créer et de continuer avec la création de bar? Est-ce assez pour vous de trouble? :)
La solution
Je sais que ce ne peut pas être la solution la plus élégante, mais c'est ce que je travaille sur et il semble faire ce que je dois à ...
#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