2009-08-03 15 views
7

私はレールアプリケーションでの動的マルチモデルフォームを実装しようとしています。私は2レベルの実装を示すEloy Duranのcomplex-forms exampleをフォローしてきましたが、これを3つのレベルに拡張しようとしています。 3レベルのフォームにaccepts_nested_attributes_forのサポートはありますか?誰も私の例のアプリケーションを展開する方法を表示することはできますか?accepts_nested_attributes_forを使用してレールに3つのレベルのネストされたフォーム

私は、第3レベルでは部分的に動作しています(何らかの理由で動作するとは限りません)が、第3レベルのオブジェクトを保存できません。それは属性ごとに通過さPARAM名は:

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

greatgrandparentフォームをするためのものであるオブジェクトであり、祖父母が第1レベルである場合、親は、第二のレベルで、オブジェクトは、3レベル(1 Iであります救済しようとしている)。

ありがとう、私は任意のポインタをありがとう。

答えて

18

complex-form-examplesをRails 2.3で使用できるように更新しました。深くネストされたモデルの例については、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

まず、ソリューションを投稿していただきありがとうございます。 2つのレベルのフォームでうまく動作しますが、より深いネストされたフォームで問題を使用しています。 add_child_linkをすでに追加されている別の部分に入れたい場合、Firebugでjavascriptエラーが表示されます。エスケープバグがあるようです。

すでにリンクメソッドに別のオプションを渡して内部の部分をエスケープするのを避けようとしましたが、これは何とか機能しません。

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 

これに関するヒントはありますか?

敬具、

マイク

関連する問題