2009-08-03 4 views
7

난 내 레일 응용 프로그램에 동적 다중 모델 양식을 구현하려고했습니다. 나는 2 레벨 구현을 보여주는 Eloy Duran의 complex-forms example을 따르고 있지만 이것을 3 단계로 확장하려고 노력해 왔습니다. 3 레벨 양식에 accepts_nested_attributes_for의 지원이 있습니까? 누구든지 예제 응용 프로그램을 확장하는 방법을 보여줄 수 있습니까?accepts_nested_attributes_for를 사용하여 레일에 3 단계 중첩 된 양식

제 3 수준에서는 자바 스크립트가 부분적으로 작동합니다 (어떤 이유로 든 작동하지는 않습니다).하지만 제 3 수준 개체를 저장할 수 없습니다. 그것은 각 속성에 전달되는 매개 변수 이름은 다음과 같습니다

greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute] 
greatgrandparent 양식은, 조부모가 첫 번째 수준이다위한 객체입니다

는, 부모가 두 번째 수준이며, 객체는 3 레벨 (하나 개의 I입니다 나는 구하려고 노력하고있어.)

감사합니다.

답변

18

레일 012와 함께 작동하도록 complex-form-examples을 업데이트했습니다. 심하게 중첩 된 모델의 예는 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 

내가 지금까지 본 가장 깨끗한 해결책입니다. 버그 또는 개선 사항을 발견하면 add an issue on GitHub주십시오.

+0

당신은 생명의 은인입니다. – Anon

+0

안녕하세요, Ryan - Rails 3에서 깊은 지점을 구현하기 위해 필요할 수있는 변경 사항에 대해 의견을 개진 할 수 있습니까? – sscirrus

+1

최신 솔루션은 Railscasts 에피소드 196 및 197을 참조하십시오. 깊은 네 스팅과 Rails 3에서 약간의 변경만으로 작동해야합니다. http://railscasts.com/episodes/196-nested-model-form-part-1 – ryanb

2

먼저 Ryan에게 솔루션을 게시 해 주셔서 감사합니다. 두 가지 수준의 형식에서 잘 작동하지만 더 중첩 된 형태로 사용하는 데 문제가 있습니다. add_child_link을 이미 추가 된 다른 부분에 넣으려고하면 Firebug에서 자바 스크립트 오류가 발생합니다. 도망가는 버그가있는 것 같습니다.

이미 링크 메서드에 다른 옵션을 전달하여 내부 부분을 이스케이프하지 않도록 노력했지만이 방법으로는 작동하지 않습니다.

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 

어떤 힌트가 있습니까?

안부,

마이크

관련 문제