2010-02-10 12 views
6

meine Modelle hier:Factory Girl und has_one

Class Audition 
    belongs_to :video 
end 

Class Video 
    has_one :audition 
end 

und meine Fabriken:

Factory.define :video do |v| 
    v.filename {Sham.filename} 
    v.video_url {Sham.url} 
end 

Factory.define :audition do |a| 
    a.video  {|a| a.association(:video)} 
    a.label  {Sham.label} 
end 

Wie könnte ich ein Video Fabrik erstellen, die ein Vorsprechen haben,

Ich meine, der Lage sein, zu:

v = Factory.create(:video) 
v.audition # I'd like this to be not nil ! 

Weil ich ha habe einen Beobachter auf meinem Video, die versuchen, das Vorspiel aus dem Video-Objekt

Ich habe versucht, mehrere Dinge, aber ich immer mit einem Stack-Level zu tief oder Audition Nil enden.

Haben Sie eine Idee?

Danke, Mike

Antwort

7

Wenn das der Fall ist ich den Verein in die andere Fabrik hinzufügen würde:

Factory.define :video do |v| 
    v.filename      {Sham.filename} 
    v.video_url      {Sham.url} 
    v.audition      {|v| v.association(:audition)} 
end 

Dann können Sie

v = Factory(:video) # This will now have an audition 
a = v.audition # This should not be nil 

und

a = Factory(:audition) # An audition without a video, if that's possible? 
tun

Sie können auch jede Vereinigung außer Kraft setzen, wenn Sie die Fabrik in Ihren Tests zu erstellen, das heißt:

v = Factory(:video, :audition => Factory(:audition)) 
v = Factory(:video, :audition => nil) 

Hoffnung, was ich gesagt habe, ist sinnvoll und richtig ist lol. Lass uns wissen, wie es dir geht.

+1

P.s. Ich denke, du bekommst einen Stapel zu tief, wenn du es sagst, wie beide Modelle mit dem anderen verbunden sind. – tsdbrown

+0

hmm, das ist genau das Problem, aber ich hatte gehofft mit einigen bedingten Magie konnte ich es in beiden einschließen :-) Ihre Antwort total sinnvoll, Danke, – Mike

+0

Nach dem stecken mit dem Versuch, eine Fabrik Mädchen Verband in beiden Seiten zu setzen der Verein habe ich schließlich aufgegeben. Und setzen Sie die Assoziation einfach in das "Slave" -Modell. In meinen Spezifikationen, wenn ich ein "Master" -Modell erstellen muss, verwende ich immer noch die "Slave" -Fabrik. Zum Beispiel: Factory.create (: Slave) .master. – Sam

Verwandte Themen