Factory Girl z polimorficznym powiązaniem dla has_many i has_one

Obecnie pracuję nad projektem i chciałem utworzyć testy przy użyciu fabryki girl, ale nie mogę sprawić, by działał z polimorficznym skojarzeniem has_many. Próbowałem wielu różnych możliwości wymienionych w innych artykułach, ale nadal nie działa. Mój model wygląda tak:

class Restaurant < ActiveRecord::Base
  has_one :address, as: :addressable, dependent: :destroy
  has_many :contacts, as: :contactable, dependent: :destroy

  accepts_nested_attributes_for :contacts, allow_destroy: true
  accepts_nested_attributes_for :address, allow_destroy: true

  validates :name, presence: true
  #validates :address, presence: true
  #validates :contacts, presence: true
end

class Address < ActiveRecord::Base
  belongs_to :addressable, polymorphic: true

  # other unimportant validations, address is created valid, the problem is not here
end

class Contact < ActiveRecord::Base
  belongs_to :contactable, polymorphic: true
  # validations ommitted, contacts are created valid
end

Tak więc chciałbym stworzyć fabrykę dla restauracji z adresem i kontaktami (z potwierdzeniem obecności w restauracji, ale jeśli nie jest to możliwe, nawet bez nich), ale nie mogę tego zrobić. Końcowa składnia powinna wyglądać następująco:

let(:restaurant) { FactoryGirl.create(:restaurant) }

Które powinny również tworzyć powiązane adresy i kontakty. Przeczytałem wiele artykułów, ale zawsze mam jakiś błąd. Obecnie moje fabryki (sekwencje są poprawnie zdefiniowane) są następujące:

factory :restaurant do
  name
  # address {FactoryGirl.create(:address, addressable: aaa)}
  # contacts {FactoryGirl.create_list(:contact,4, contactable: aaa)}
  # Validations are off, so this callback is possible
  after(:create) do |rest|
    # Rest has ID here
    rest.address = create(:restaurant_address, addressable: rest)
    rest.contacts = create_list(:contact,4, contactable: rest)
  end
end

factory :restaurant_address, class: Address do
  # other attributes filled from sequences...

  association :addressable, factory: :restaurant
  # addressable factory: restaurant
  # association(:restaurant)
end

factory :contact do
  contact_type
  value

  association :contactable, :factory => :restaurant
end

Czy istnieje sposób na utworzenie restauracji z jednym poleceniem w teście z ustawionymi adresami i kontaktami? Czy naprawdę muszę pozbyć się moich walidacji z powodu wywołania zwrotnego (: create)? Bieżący stan jest taki sam:

Restauracja jest tworzona z nazwą i identyfikatorem.Niż adres jest tworzony - wszystko jest poprawne, ma wszystkie wartości, w tym addressable_id i addressable_typePo tym, jak wszystkie kontakty są tworzone, znowu wszystko jest w porządku, kontakty mają odpowiednie wartości.Potem restauracja nie ma żadnych identyfikatorów z powiązanych obiektów, żadnych powiązań z adddress lub kontaktamiPóźniej, z jakiegoś powodu restauracja jest ponownie budowana (może by dodać te skojarzenia?) I kończy się niepowodzeniem: dostaję ActiveRecord: RecordInvalid.

Używam factory_girl_rails 4.3.0, ruby ​​1.9.3 i rails 4.0.1. Będę zadowolony z wszelkiej pomocy.

AKTUALIZACJA 1:

Aby wyjaśnić mój cel, chcę móc utworzyć restaurację w mojej specyfikacji za pomocą jednego polecenia i móc uzyskać dostęp do powiązanego adresu i kontaktów, które powinny zostać utworzone po utworzeniu restauracji. Zignorujmy wszystkie walidacje (od początku miałem je skomentowane). Kiedy używampo (: build), tworzona jest pierwsza restauracja, niż adres tworzony z identyfikatorem restauracji jakoid adresowalny i nazwa klasy jakotyp_adresowalny. To samo dotyczy kontaktów, wszystkie są poprawne. Problem polega na tym, że restauracja nie wie o nich (nie ma identyfikatorów adresu ani kontaktów), nie mogę uzyskać do nich dostępu z restauracji, którą chcę.

questionAnswers(2)

yourAnswerToTheQuestion