2012-05-03 17 views
24

'da ilişkilendirmede ayar özniteliğinde geçiş parametresi İlişkili bir modelde özniteliği ayarlamak için kullanılacak bir fabrikaya parametre göndermek istiyorum. İlgili model fabrikada oluşturulur.FactoryGirl

TxLink birleştirme tablosu aracılığıyla kendisine çoktan çoğa bağlantı içeren bir İşlem modelim var. İki Transaction nesnesi ve ikisini bağlayan bir TxLink oluşturacak olan link = FactoryGirl.create(:link_red_to_sub, sub: 10, red: 7) numaralı telefonu aramak istiyorum.

Sonunda units: sub nedeniyle aşağıdaki ilişkilendirme satırında bir hata alıyorum. Hata "özellik tanımlı değil" dir. Bunun yerine units: { sub } (köşeli parantez) denedim ancak zar atmadım.

factory :tx_link do 
    units "9.99" 

    factory :link_red_to_sub do 
     ignore do 
     sub 0 
     red 0 
     end 
     units { red } 

     association :giver, factory: :transaction, units: sub 
     association :taker, factory: :redemption, units: red 
    end 
    end 

cevap

33

factory_girl içinde association yardımcı dinamik özellik argümanları alamaz, ancak dernek örneğini dinamik özelliğini kullanabilirsiniz ancak istediğiniz:

factory :tx_link do 
    units "9.99" 

    factory :link_red_to_sub do 
    transient do 
     sub 0 
     red 0 
    end 
    units { red } 

    giver { create(:transaction, units: sub) } 
    taker { create(:redemption, units: red) } 
    end 
end 

bu sadece olumsuz olduğunu giver ve taker dernekleri, tx_link ile hangi stratejiyi oluşturduğunuza bakılmaksızın oluşturma stratejisini kullanacaktır; bu,ve build_stubbed fabrikalarının tx_link fabrikası için doğru şekilde çalışmadığı anlamına gelir.

Sağladığım örnek sürüm 4.5.0 gerektirir. Joe'nun yanıta genişletilmesi

+0

kullanımdan kaldırıldı görmezden. Bunun yerine, "geçici" kullanmalıyız – hcarreras

23

yapı ve yaratmak arasındaki farklılaşmayı sağlamak için:

factory :tx_link do 
    units "9.99" 

    factory :link_red_to_sub do 
    ignore do 
     sub 0 
     red 0 
    end 
    units { red } 

    giver { build(:transaction, units: sub) } 
    taker { build(:redemption, units: red) } 

    after(:create) do |link_red_to_sub| 
     link_red_to_sub.giver.save! 
     link_red_to_sub.taker.save! 
    end 
    end 
end 
İlgili konular