2009-08-03 18 views
7

Ho cercato di implementare un modulo multi-modello dinamico con accepts_nested_attributes_for nella mia applicazione rotaie. Ho seguito Eloy Duran complex-forms example che mostra un'implementazione a 2 livelli, ma ho cercato di estenderlo a 3 livelli. C'è un supporto con accepts_nested_attributes_for per un modulo a 3 livelli? Qualcuno può mostrarmi come espandere l'app di esempio?Forme nidificate a tre livelli nei binari usando accept_nested_attributes_for

Ho il javascript parzialmente funzionante (non funziona sempre per qualche motivo) per il 3 ° livello, ma non posso salvare gli oggetti di 3 ° livello. Il param name sta passando per ogni attributo è:

greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute] 

Dove greatgrandparent è l'oggetto del modulo è, nonno è il primo livello, genitore è il secondo livello, e l'oggetto è il 3 ° livello (quello che sto cercando di salvare).

Grazie, apprezzo qualsiasi suggerimento.

risposta

18

Ho aggiornato il mio complex-form-examples per funzionare con Rails 2.3. Vedere lo deep branch per un esempio su modelli profondamente annidati.

git clone git://github.com/ryanb/complex-form-examples.git 
cd complex-form-examples 
git checkout -b deep origin/deep 
rake db:migrate 
script/server 

È la soluzione più pulita che ho visto finora. Se trovi bug o miglioramenti, perfavore add an issue on GitHub.

+0

Sei un risparmiatore di vita. – Anon

+0

Ciao Ryan - potresti commentare eventuali cambiamenti che potrebbero essere necessari per implementare un ramo profondo in Rails 3? – sscirrus

+1

Vedere gli episodi Railscast 196 e 197 per la mia ultima soluzione. Dovrebbe funzionare con nidificazione profonda e in Rails 3 con solo poche modifiche. http://railscasts.com/episodes/196-nested-model-form-part-1 – ryanb

2

Innanzitutto grazie a Ryan per aver pubblicato una soluzione. Funziona molto bene in una forma a due livelli, ma ho problemi ad usarlo in una forma nidificata più profonda. Firebug mi dà un errore javascript se voglio inserire un add_child_link in un altro già aggiunto parziale. Sembra che ci sia un bug che sfugge.

già cercato di evitare fuoriuscita parziale interno passando un'altra opzione al metodo di collegamento, ma in qualche modo non funziona.

def add_child_link(name, f, options) 
    fields = new_child_fields(f, options) 
    fields = escape_javascript(fields) unless options[:already_escaping] == true 
    link_to_function name, %{ 
     var new_object_id = new Date().getTime(); 
     var html = jQuery("#{fields}".replace(/#{options[:index]}/g, new_object_id)).hide(); 
     html.appendTo(jQuery("#{options[:where]}")).show(); 
     } 
end 

Qualche suggerimento in merito?

Con i migliori saluti,

Mike