2009-06-26 17 views
8

Fabryka Dziewczyna docs oferują tej składni do tworzenia (chyba) Stowarzyszenia rodzic-dziecko ...Jak zdefiniować wiele powiązanych obiektów za pomocą Factory Girl?

Factory.define :post do |p| 
    p.author {|a| a.association(:user) } 
    end 

Słupek należy do Użytkownika (jego „autor”).

Co należy zrobić, jeśli chcesz zdefiniować Factory, aby utworzyć User s, które mają kilka Post s?

A co, jeśli sytuacja dotyczy wielu osób (patrz np. Aktualizacja poniżej)?


UPDATE

myślałem, że zdobione. Próbowałem to ...

Factory.define(:user) do |f| 
    f.username { Factory.next(:username) } 

    # ... 

    f.roles { |user| 
    [ 
     Factory(:role), 
     Factory(:role, {:name => 'EDIT_STAFF_DATA'}) 
    ] 
    } 
end 

Najpierw wydawało się działać, ale potem dostałem błędy sprawdzania poprawności, ponieważ F.G. próbował zapisać użytkownika dwukrotnie z tą samą nazwą użytkownika i adresem e-mail.

Powracam więc do mojego pierwotnego pytania. Jeśli masz relację wiele do wielu, np. Users i Roles, w jaki sposób możesz zdefiniować Factory, które zwróci Users z niektórymi powiązanymi Roles? Zauważ, że Roles musi być unikalny, więc nie mogę mieć F.G. tworzenie nowego "ADMIN" Role w DB za każdym razem, gdy tworzy on User.

Odpowiedz

5

Nie jestem pewien, czy jest to najbardziej poprawny sposób, ale działa.

Factory.define(:user) do |u| 
    u.login 'my_login' 
    u.password 'test' 
    u.password_confirmation 'test' 
    u.roles {|user| [user.association(:admin_role), 
         user.association(:owner_role, :authorizable_type => 'User', :authorizable_id => u.id) ]} 
end 
1

I stworzył active_factory plugin, który zajmuje się sytuacji w specyfikacji tak:

models { user - posts(3) } 

Jeśli jest zainteresowanie, mogę spróbować stworzyć integrację z fabryką factory_girl.

Powiązane problemy