2010-02-10 95 views
6

這裏是我的模型:工廠女孩和HAS_ONE

Class Audition 
    belongs_to :video 
end 

Class Video 
    has_one :audition 
end 

和我的工廠:

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 

我怎麼可以創建一個視頻工廠有試鏡,

我的意思是,能夠到:

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

因爲我哈已經在我的視頻,嘗試從視頻對象

我試過幾件事情,但我總是用棧層次過深或試鏡零結束訪問試鏡的觀察員。

你有一個想法?

謝謝, 邁克

回答

7

如果這是我想補充的關聯到其他工廠的情形:

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

然後,你可以做

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

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

你也可以當你在測試中創建的工廠需要,即覆蓋任何關聯關係:

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

希望我說的話是有道理的,是真實的笑。讓我們知道您的身體情況如何。

+1

附:我覺得你有堆棧層太深,如果你一些如何告訴有另一種關聯這兩種模型。 – tsdbrown 2010-02-10 20:54:10

+0

嗯,這正是問題,但我希望與一些有條件的魔法,我可以在兩個包括它:-) 您的回覆完全有意義, 謝謝, – Mike 2010-02-11 10:29:30

+0

在試圖把一個工廠女孩協會我最終放棄了這個協會。只要把這個協會放在「奴隸」模式裏面。在我的規格時,我需要創建一個「主」的模式,我還是用「奴隸」的工廠。例如:Factory.create(:slave).master。 – Sam 2010-07-16 08:12:26