2010-09-05 12 views
5

estoy poniendo en práctica Factory Girl como un reemplazo para los accesorios en mi aplicación Rails. Tengo varias tablas que intento representar usando asociaciones. Sin embargo, para lanzar una torcedura en el bucle, más allá de la definición de las asociaciones, también necesito para acceder a los atributos de las fábricas niño de los padres.infantil Acceso a los atributos de la fábrica matriz fábricas de chicas

A continuación se muestra un ejemplo de lo que estoy tratando de hacer:

  • fábrica: foo_bar se asocia a la fábrica: foo, que se asocia a la fábrica: barra de
  • Desde: foo_bar, estoy tratando de atributos de acceso de ambos: foo y: barra de

Aquí están las muestras:

Factory.define :bar do |e| 
    e.name   "Bar" 
end 

Factory.define :foo do |e| 
    e.bar   {|b| b.association(:bar)} 
end 

Factory.define :foo_bar do |b| 
    f = b.association(:foo) 
    b.foo_id  foo.id 
    b.bar_id  foo.bar_id 
end 

He pasado por una serie de tutoriales y otras preguntas y no he visto ejemplos de cómo hacer esto. ¿Alguna idea u otras formas de obtener el mismo resultado?

Gracias!


EDITAR

Sobre la base de un par de las preguntas, he aquí algunas aclaraciones que debería haber incluido originalmente ...

: foo_bar no es una tabla de unión, sino un modelo con otros atributos propios.

Esto es lo que estoy realmente tratando de lograr:

  • tienen: foo_bar crear una fábrica asociada
  • entonces tienen que fábrica asociada a crear se asocia fábrica
  • (este es el elemento I' m luchando con) tiene: foo_bar acceder a un atributo de la fábrica de nivel inferior

lo tanto, si: foo_bar> foo>: bar, entonces a partir de: foo_bar, estoy tratando de conseguir en: Identificación del bar.

+0

No estoy muy claro en lo que: foo_bar es. ¿Es solo una tabla de unión o tiene otras propiedades que no están en la lista? –

+0

Hola, gracias por el comentario. Sí, puedo ver cómo es confuso de la versión simplificada. : foo_bar tiene otros atributos que simplemente no se muestran. No es una tabla de unión. – shedd

+0

Este es el hilo que he estado mirando, FYI: http://groups.google.com/group/factory_girl/browse_thread/thread/2ffdd38eb31b0727?pli=1 – shedd

Respuesta

0

difícil saber cómo debe mirar sin el código de modelo?

pero tal vez algo como esto?

Factory.define :bar do |f| 
    f.name "Bar" 
    f.association :foo_bar 
end 

Factory.define :foo do |f| 
    f.name "Foo" 
    f.association :foo_bar 
end 

Factory.define :foo_bar do |f| 
    f.association :foo 
    f.association :bar  
end 
+0

Gracias por la respuesta. Creo que mi ejemplo no ilustra claramente la pregunta completa.Voy a revisarlo para que sea más claro, pero lo que en realidad estoy tratando de hacer es tener: foo_bar crear una fábrica asociada, y luego tener esa fábrica asociada creará una fábrica asociada, pero (y este es el elemento que estoy luchando con) también tienen: foo_bar accede a un atributo desde el nivel inferior Fábrica. Entonces,: foo_bar>: foo>: bar y desde: foo_bar, estoy tratando de llegar a: ID de la barra. ¿Eso tiene más sentido? – shedd

4

estoy usando un gancho after_build para manejar situaciones como esta:

Factory.define :foo do |f| 
    f.name "Foo" 
    f.association :foo 
    f.after_build do |obj| 
    obj.foo_bar = obj.foo.bar 
    end 
end 
Cuestiones relacionadas