2011-03-18 142 views
0

我有一個問題,after_build似乎不會在實際構建後觸發。如下例所示,after_build在通過Factory.build:tail調用時不應該建立第二個尾部,因爲已經有尾部了。空?不工作在工廠女孩

任何人都知道如何解決這個問題?或者如何修補Factory Girl以達到預期的效果。

否認的事實是貓的一般不會有多個尾巴等:)

模型
class Cat 
    include Mongoid::Document 
    embeds_many :tails 
end 

class Tail 
    include Mongoid::Document 
    embedded_in :cat 
end 
工廠
Factory.define :cat do |a| 
    a.after_build do |cat| 
    Factory.build :tail, :cat => cat if cat.tails.empty? 
    end 
end 

Factory.define :tail do |a| 
    a.association :cat, :factory => :cat 
end 
問題
>> tail = Factory.build :tail 
=> #<Tail _id: 4d839b5930efd431c7000008, > 
>> tail.cat.tails.length 
=> 2 # this should be 1 
>> cat = Factory.build :cat 
=> #<Cat _id: 4d839b6c30efd431c700000b, > 
>> cat.tails.length 
=> 1 

回答

0

這就是我最終使用的。我遵循Marcels關於使用單獨工廠的建議,儘管after_build仍然導致同樣的問題(兩個尾部而不是預期的),所以它也必須去。如果cat.tails.empty?由於某種原因不按預期工作。

Factory.define :cat_tail, :parent => :tail do |a| 
    a.association :cat, :factory => :cat 
end 

Factory.define :tail do |a| 
end 

Factory.define :cat do |a| 
end 
2

我就從定義切莫創建貓並嵌入尾部的尾部的默認工廠。

Factory.define :cat do |a| 
    a.after_build do |cat| 
    cat.tails << Factory.build(:tail) if cat.tails.empty? 
    end 
end 

Factory.define :tail do |a| 

end 

Factory.define :cat_tail, :parent => :tail do |a| 
    a.association :cat, :factory => :cat 
end