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? :)

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top