Próbuję dowiedzieć się, jak napisać fabrykę należącą do 2 różnych modeli, z których każdy powinien mieć ten sam model nadrzędny. Oto wymyślony przykładowy kod:Kompleksowe powiązanie FactoryGirl z wieloma modelami
class User < ActiveRecord::Base
has_many :widgets
has_many :suppliers
attr_accessible :username
end
class Widget < ActiveRecord::Base
belongs_to :user
has_many :parts
attr_accessible :name
end
class Supplier < ActiveRecord::Base
belongs_to :user
has_many :parts
attr_accessible :name
end
class Part < ActiveRecord::Base
belongs_to :supplier
belongs_to :widget
attr_accessible :name
end
Oto co mam do tej pory:
factory :user do
name 'foo'
end
factory :widget do
association :user
name 'widget'
end
factory :supplier do
association :user
name 'supplier'
end
factory :part do
association :widget
association :supplier
name 'part'
end
Problem polega na tym, że part.widget.user != part.supplier.user
i muszą być takie same.
Próbowałem następujących bez powodzenia:
factory :part do
association :widget
association :supplier, user: widget.user
name 'part'
end
jakieś sugestie? Czy muszę go modyfikować po utworzeniu części?
Dziękuję
Wielkie dzięki. Skończyło się na użyciu 'after (: build)' i 'part.widget.user = part.supplier.user' w ten sposób nie tworzę 3 użytkowników :) –
Świetnie, że zadziałało! Nie byłem do końca pewien. Wydaje mi się, że musi to być czystszy sposób. –
Tak też myślałem, ale 'asocjacja: dostawca, użytkownik: widget.user' nie działa, może być czymś, na co warto zaglądać dla łaty –