Factory Girl com associação polimórfica para has_many e has_one

Atualmente, estou trabalhando em um projeto e queria criar testes usando a menina de fábrica, mas não consigo fazê-lo funcionar com a associação polimórfica has_many. Eu tentei muitas possibilidades diferentes mencionadas em outros artigos, mas ainda não funciona. Meu modelo fica assim:

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

Então, baixo, eu quero criar uma fábrica para o restaurante com endereço e contatos (com validações no restaurante para presença, mas se não for possível, mesmo sem eles), mas não posso fazê-lo. A sintaxe final deve ser como:

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

O que também deve criar endereços e contatos associados. Eu li muitos artigos, mas sempre recebo algum tipo de erro. Atualmente minhas fábricas (sequências são definidas corretamente) são assim:

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

Existe uma maneira de criar restaurante com um comando em teste com endereços e contatos definidos? Eu realmente preciso me livrar de minhas validações por causa do retorno de chamada após (: criar)? O estado atual é o seguinte:

Restaurante é criado com nome e id.Do que o endereço está sendo criado - tudo está correto, ele tem todos os valores, incluindo addressable_id e addressable_typeDepois que todos os contatos estão sendo criados, novamente tudo está bem, cntacts tem os valores certos.Depois disso, o restaurante não possui IDs de objetos associados, nenhuma associação para endereço ou contatosDepois disso, por algum motivo, o restaurante é construído novamente (talvez para adicionar essas associações?) E falha: recebo ActiveRecord: RecordInvalid.

Estou usando factory_girl_rails 4.3.0, ruby 1.9.3 e rails 4.0.1. Ficarei feliz por qualquer ajuda.

ATUALIZAÇÃO 1:

Apenas para esclarecer meu objetivo, desejo criar restaurante em minhas especificações usando um comando e acessar endereços e contatos associados, que devem ser criados após a criação do restaurante. Vamos ignorar todas as validações (eu as tive comentadas no meu exemplo desde o início). Quando eu usodepois (: compilação), o primeiro restaurante é criado e o endereço é criado com o ID do restaurante comoaddressable_id e nome da classe comoaddressable_type. O mesmo vale para os contatos, todos estão corretos. O problema é que esse restaurante não sabe sobre eles (não possui IDs de endereço ou contatos), não consigo acessá-los no restaurante que desejo.

questionAnswers(2)

yourAnswerToTheQuestion