2010-09-05 12 views
5

Sto implementando Factory Girl come sostituzione di proiettori nella mia app Rails. Ho diverse tabelle che sto cercando di rappresentare usando le associazioni. Tuttavia, per gettare un nodo nel ciclo, oltre alla semplice definizione delle associazioni, devo anche accedere agli attributi delle fabbriche secondarie dal genitore.Accesso agli attributi secondari dal genitore Factory Factory

Di seguito è un esempio di quello che sto cercando di fare:

  • fabbrica: foo_bar è associato fabbrica: foo, che è associato alla fabbrica: bar
  • Da: foo_bar, io sono cercando di attributi di accesso di entrambi: foo e: bar

Qui ci sono i campioni:

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 

Ho seguito una serie di tutorial e altre domande e non ho visto alcun esempio su come farlo. Qualche idea o altri modi per ottenere lo stesso risultato?

Grazie!


EDIT

Sulla base di un paio di domande, ecco alcune precisazioni che avrei incluso originariamente ...

: foo_bar non è una tabella unirsi, ma un modello con altri attributi propri.

Questo è quello che sto effettivamente cercando di realizzare:

  • hanno: foo_bar creare una fabbrica associato
  • poi hanno quel fabbrica associato a creare è associato fabbrica
  • (questo è l'elemento che' m alle prese con) hanno: foo_bar accedere ad un attributo dalla fabbrica livello più basso

quindi, se: foo_bar>: foo>: bar poi da: foo_bar, sto cercando di arrivare a: ID del bar.

+0

io non sono davvero chiaro su che cosa: foo_bar è. È solo una tabella di join o ha altre proprietà che non sono elencate? –

+0

Ciao - grazie per il commento. Sì, posso vedere come è confusionario dalla versione semplificata. : foo_bar ha altri attributi che non vengono mostrati. Non è un tavolo dei join. – shedd

+0

Questa è la discussione che stavo guardando, fyi: http://groups.google.com/group/factory_girl/browse_thread/thread/2ffdd38eb31b0727?pli=1 – shedd

risposta

0

Difficile dire come dovrebbe apparire senza il codice del modello?

ma forse qualcosa del genere?

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

Grazie per la risposta. Penso che il mio esempio non abbia chiaramente illustrato l'intera domanda.Lo rivedrò per essere più chiaro, ma quello che sto cercando di fare è: foo_bar crea una Factory associata, e poi quella Factory associata crea la Factory associata, ma (e questo è l'elemento che sto lottando con) hanno anche: foo_bar accedere ad un attributo dal livello inferiore Factory. Quindi,: foo_bar>: foo>: bar e da: foo_bar, sto cercando di ottenere: ID della barra. Ha più senso? – shedd

4

Sto utilizzando un gancio after_build per gestire situazioni come questa:

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