Factory Girl con asociación polimórfica para has_many y has_one

Actualmente estoy trabajando en un proyecto y quería crear pruebas con Factory Girl, pero no puedo hacer que funcione con la asociación polimorfa has_many. He intentado muchas posibilidades diferentes mencionadas en otros artículos pero todavía no funciona. Mi modelo se ve así:

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

Así que, a la baja, quiero crear una fábrica para el restaurante con dirección y contactos (con validaciones en la presencia del restaurante, pero si no es posible, incluso sin ellos) pero no puedo hacerlo. La sintaxis final debería ser como:

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

Que también debe crear la dirección asociada y contactos. He leído muchos artículos pero siempre recibo algún tipo de error. Actualmente mis fábricas (las secuencias están definidas correctamente) son así:

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

¿Hay una manera de crear un restaurante con un comando en prueba con direcciones y contactos establecidos? ¿Realmente necesito deshacerme de mis validaciones debido a una devolución de llamada posterior (: crear)? El estado actual es el que fluye:

El restaurante se crea con nombre e id.Una vez que se está creando la dirección, todo está correcto, tiene todos los valores, incluyendo addressable_id y addressable_typeDespués de que todos los contactos se están creando, todo está bien, cntacts tiene los valores correctos.Después de eso, el restaurante no tiene ninguna identificación de objetos asociados, ninguna asociación con dirección o contactosDespués de eso, por alguna razón, el restaurante se construye de nuevo (¿quizás para agregar esas asociaciones?) Y falla: Obtengo ActiveRecord: RecordInvalid.

Estoy usando factory_girl_rails 4.3.0, ruby ​​1.9.3 y rails 4.0.1. Me alegraré por cualquier ayuda.

ACTUALIZACIÓN 1:

Solo para aclarar mi objetivo, quiero poder crear un restaurante en mi especificación con un solo comando y poder acceder a la dirección y los contactos asociados, que deben crearse al crear el restaurante. Ignoremos todas las validaciones (las hice comentar en mi ejemplo desde el principio). Cuando yo usodespués de (: construir), se crea el primer restaurante, que la dirección se crea con la ID del restaurante comodireccionable_id y el nombre de la clase comotipo de dirección. Lo mismo ocurre con los contactos, todos son correctos. El problema es que el restaurante no los conoce (no tiene una identificación de la dirección ni los contactos), no puedo acceder a ellos desde el restaurante que deseo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta