2010-10-06 13 views
5

Mam trzy modele przedstawione w formie wielomodowej.Rails 3 Multi Model Form z wieloma nowymi przykładami submodelu

class Parent < ActiveRecord::Base 
    has_many :children 
    accepts_nested_attributes_for :children 
end 

class Child < ActiveRecord::Base 
    belongs_to :parent 
    has_many :other_children 
    accepts_nested_attributes_for :other_children 
end 

class OtherChild < ActiveRecord::Base 
    belongs_to :child 
end 

= form_for @parent do |f| 
    # fields for parent 
    = f.fields_for :children, @parent.children do |cf| 
    = cf.fields_for :other_children, @parent.children do |ocf| 
     # fields_for other child 
    = cf.fields_for :other_children, @parent.children.new do |ocf| 
     # fields_for other child 

Działa to z wyjątkiem sytuacji, gdy duplikuję drugi zestaw pól potomnych za pomocą jquery. Aby było bardziej zrozumiałe, field_for z nowym modelem other_child ma przycisk create, który uruchamia niektóre jquery, takie jak $(new_child_form).clone().insertBefore($(new_child_form)), pozwalając na dodanie więcej niż jednego modelu podrzędnego w tym samym formularzu. Wiem, że mogę przesłać każdy formularz dziecka indywidualnie za pośrednictwem ajax, ale to nie jest to, co chcę.

Szyny jest coraz więcej niż jeden parent[children_attributes][0][other_children_attributes][1] i tylko wydaje się używać ostatniego. Jakieś pomysły?

Odpowiedz

5

Możesz to zrobić z lub bez użycia jQuery do sklonowania. Rozwiązałem ten problem, używając linku wywołującego Javascript, który wstawił elementy, ale wygenerował unikalny identyfikator na podstawie bieżącego czasu. Jeśli używasz jQuery do klonowania, musisz zaktualizować identyfikatory sklonowanych pól, aby Railsy traktowały je jako nowe. Ryan Bates ilustruje, jak to zrobić w Railscasts 196-197, a jego rozwiązanie kontynuuje pracę z Railsami 3.