2009-08-03 11 views
7

Próbuję wdrożyć dynamiczny formularz wielu modeli z accepts_nested_attributes_for w mojej aplikacji rails. Śledziłem wersję Eule Durana complex-forms example, która pokazuje implementację na poziomie 2, ale starałem się ją rozszerzyć na 3 poziomy. Czy istnieje wsparcie dla accepts_nested_attributes_for dla formularza 3 poziomowego? Czy ktoś może mi pokazać, jak rozwinąć przykładową aplikację?Trzy poziomy zagnieżdżonych formularzy w szynach za pomocą accepts_nested_attributes_for

Mam javascript częściowo działa (nie zawsze działa z jakiegoś powodu) na 3 poziomie, ale nie mogę zapisać obiektu (obiektów) trzeciego poziomu. Nazwa param to przechodzi do każdego atrybutu:

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

przypadku greatgrandparent obiektem forma jest, dziadek to pierwszy poziom, macierzysty jest drugi poziom, a celem jest poziom 3 (jeden I próbuję ratować).

Dzięki, doceniam wszelkie wskazówki.

Odpowiedz

18

Zaktualizowałem mój complex-form-examples do pracy z Railsami 2.3. Zobacz przykład w modelach głęboko zagnieżdżonych na stronie deep branch.

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 

To najczystsze rozwiązanie, jakie do tej pory widziałem. Jeśli znajdziesz jakieś błędy lub ulepszenia, prosimy o kontakt pod numerem add an issue on GitHub.

+0

Jesteś wygaszacz życia. – Anon

+0

Witaj Ryan - czy mógłbyś skomentować wszelkie zmiany, które mogą być konieczne, aby wdrożyć głęboki oddział w Rails 3? – sscirrus

+1

Zobacz ostatnie odcinki Railscasts 196 i 197. Powinien działać z głębokim zagnieżdżaniem, a w Railsach 3 z tylko kilkoma zmianami. http://railscasts.com/episodes/196-nested-model-form-part-1 – ryanb

2

Po pierwsze dziękuję Ryan za opublikowanie rozwiązania. Działa bardzo dobrze w formie dwupoziomowej, ale mam problemy z używaniem go w głębszej formie zagnieżdżonej. Firebug daje mi błąd javascript, jeśli chcę umieścić add_child_link w innym już dodanym częściowym. Wygląda na to, że pojawia się usterka.

Próbowałem już uniknąć ucieczki z częściowej części poprzez przekazanie innej opcji do metody łączenia, ale to jakoś nie działa.

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 

Jakieś wskazówki na ten temat?

poważaniem,

Mike

Powiązane problemy