2010-02-10 25 views
6

Dưới đây là mô hình của tôi:Factory Girl và has_one

Class Audition 
    belongs_to :video 
end 

Class Video 
    has_one :audition 
end 

và nhà máy của tôi:

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 

Làm thế nào tôi có thể tạo ra một nhà máy video mà có một buổi thử giọng,

Ý tôi là, có thể đến:

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

Vì tôi ha đã quan sát trên video của tôi mà cố gắng truy cập vào các buổi thử giọng từ đối tượng video

Tôi đã thử nhiều thứ nhưng tôi luôn luôn kết thúc với một chồng mức quá sâu hoặc thử giọng nil.

Bạn có một ý tưởng?

Cảm ơn, Mike

Trả lời

7

Nếu đó là trường hợp tôi sẽ thêm gắn vào máy khác:

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

Sau đó, bạn có thể làm

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? 

Bạn cũng có thể ghi đè bất kỳ liên kết nào khi cần thiết khi tạo nhà máy trong các thử nghiệm của mình, tức là:

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

Hy vọng những gì tôi nói có ý nghĩa và đúng là lol. Hãy cho chúng tôi biết bạn lấy như thế nào.

+1

T.B. Tôi nghĩ rằng bạn có được một mức độ ngăn xếp quá sâu nếu bạn một số làm thế nào nói với cả hai mô hình có một liên kết với một trong những khác. – tsdbrown

+0

hmm đó chính xác là vấn đề nhưng tôi đã hy vọng với một số phép thuật có điều kiện tôi có thể bao gồm nó trong cả hai :-) Câu trả lời của bạn hoàn toàn hợp lý, Cảm ơn, – Mike

+0

Sau khi bị kẹt với cố gắng đặt một hiệp hội nữ nhà máy ở cả hai mặt Hiệp hội cuối cùng tôi đã từ bỏ nó. Và chỉ cần đặt liên kết bên trong mô hình "nô lệ". Trong thông số kỹ thuật của tôi khi tôi cần tạo một mô hình "chính", tôi vẫn sử dụng nhà máy "nô lệ". Ví dụ: Factory.create (: slave) .master. – Sam

Các vấn đề liên quan